From 5166f3507da445dfef461a4a0b1c41f7091b0788 Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Mon, 27 Jul 2026 00:55:21 +0300 Subject: [PATCH] Improve UI Signed-off-by: denis0001-dev --- app/desktop/build.gradle.kts | 25 +- app/desktop/icons/app_window_icon.icns | Bin 0 -> 268148 bytes .../ru/fromchat/desktop/DesktopWindowPrefs.kt | 23 +- .../main/kotlin/ru/fromchat/desktop/Main.kt | 268 ++++-- .../composeResources/values-ru/strings.xml | 1 + .../composeResources/values/strings.xml | 1 + .../fromchat/desktop/DesktopMenuCommands.kt | 2 + .../commonMain/kotlin/ru/fromchat/ui/App.kt | 816 ++++++------------ .../ru/fromchat/ui/chat/panels/dm/DmNav.kt | 2 +- .../chat/panels/publicchat/PublicChatNav.kt | 2 +- .../fromchat/ui/main/DesktopDetailNavHosts.kt | 156 ++++ .../fromchat/ui/main/DesktopTabDetailHosts.kt | 31 +- .../ui/main/MainDetailDestinations.kt | 292 +++++++ .../ru/fromchat/ui/main/MainDetailNav.kt | 38 +- .../kotlin/ru/fromchat/ui/main/MainScreen.kt | 36 +- .../ru/fromchat/ui/main/chats/ChatsTab.kt | 4 +- .../fromchat/ui/main/settings/SettingsTab.kt | 32 +- .../fromchat/desktop/DesktopAboutContent.kt | 80 -- 18 files changed, 1025 insertions(+), 784 deletions(-) create mode 100644 app/desktop/icons/app_window_icon.icns create mode 100644 app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/DesktopDetailNavHosts.kt create mode 100644 app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainDetailDestinations.kt delete mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/desktop/DesktopAboutContent.kt diff --git a/app/desktop/build.gradle.kts b/app/desktop/build.gradle.kts index 8b7447d..21a362f 100644 --- a/app/desktop/build.gradle.kts +++ b/app/desktop/build.gradle.kts @@ -23,6 +23,9 @@ dependencies { } } +val desktopWindowIconPng = layout.projectDirectory.file("src/main/resources/app_window_icon.png") +val desktopWindowIconIcns = layout.projectDirectory.file("icons/app_window_icon.icns") + compose.desktop { application { mainClass = "ru.fromchat.desktop.MainKt" @@ -42,8 +45,16 @@ compose.desktop { "javafx.swing", ) + // Without iconFile, packaged apps (and macOS dock via jpackage) use Compose's default logo. + linux { + iconFile.set(desktopWindowIconPng) + } + windows { + iconFile.set(desktopWindowIconPng) + } macOS { bundleID = "ru.fromchat.desktop" + iconFile.set(desktopWindowIconIcns) infoPlist { extraKeysRawXml = """ CFBundleURLTypes @@ -80,8 +91,20 @@ tasks.matching { it.name == "run" }.configureEach { javafxModules.any { module -> file.name.startsWith("javafx-$module-") } } classpath = files(classpath.files.filterNot { it in javafxJars.toSet() }) + val dockIconArgs = buildList { + // Compose only adds -Xdock:icon when macOS.iconFile is set; pin PNG for :run too. + val os = System.getProperty("os.name").orEmpty().lowercase() + if (os.contains("mac")) { + val png = desktopWindowIconPng.asFile + val icns = desktopWindowIconIcns.asFile + when { + icns.isFile -> add("-Xdock:icon=${icns.absolutePath}") + png.isFile -> add("-Xdock:icon=${png.absolutePath}") + } + } + } jvmArgs( - listOf( + dockIconArgs + listOf( "--module-path", javafxJars.joinToString(File.pathSeparator) { it.absolutePath }, "--add-modules", diff --git a/app/desktop/icons/app_window_icon.icns b/app/desktop/icons/app_window_icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..8e3913afd4b851d3e1fb1d338ff1be2af9fd637f GIT binary patch literal 268148 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 z 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

|_>j}$wG;Je{S#c&=u>CB=Fj$ju1Y1g7 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 z z60A!uY57dC=4!0BhgEt6SFazPPpaov-H+?@R>ldZ%vZZEALo#Xy?44FUR%#basr?Q z;KXyW^z)~4aCL;rA9fkVKm2zXswfehSoQ^U8R1k3m;i0yMMkt1Y5U00B)+1V_Eqk~ z?446psb66H56i17Wad9@)hz5Y13v3Q3^OhsLs$pki#u_*M8U7BWz>W2y?)FbfzbJj zbC)&&!IC>v%1k~5#?$D(bqA;%Z@;rtNKQa~xjvcrA?e%57p4~Y=&d(NV+J)ZnP_4w zUL~0cklofbZEsd6eL(yaW>9f1*n4&-uE7Hprqf72MKeJna~XD#o?#Mm7nGCUHG0`7 zp+EMv1`KgG>v0b)?j&CGJWmGn{QmZ%q~ zyQLe=q*Wb&YgC;?|XU+b%zZNHys0>4=fR8mF^^A%-WTDtE$Y+ zk5-SiH>h*{6RO0{mcGQD5GMU1Q_{<$&eNIp3B&IL%yZ14@*Sk8rSbUpY0FbwBRpW@ z;@oX5Ws;WjU2iv1?KueCSrH^avmO~44ez%Je!x{owWrDwdueXuacB4AKYlh=E@_B3 z8e5?~jSF_UD$~a2Y&K&LB>2EiAd&V)Ny8#2ILmZ9d{}q?$E(HzjCoo#-v5*I9c2i^ zJ5Y@*Hr8TZ<`E;UL^k#E;&b}KqlPr6HvDA8HyK!uagvh`foZ^&J(SS^^|$}SXM}-n z{;5PWIu}Wm^Q(6rG{@8>HMU_I{VWB_!vQ93M1X->2K!Tyha-esHMdFIgvCbP#hPn( zo@H90E|p>6RU^xOe)Qa9=ax4?UDfVwu{Y920&LP&EhdpJTcv(lN;9^7!zS~W*sda4 zNLvgW$9xRvE%4HVzmEe?StmV~eclK!J!H>f8%sM|-;^(b@^~JRdJ<{`b=Naeo!|~9 zH@jVguo1t6%!QM~+46U|X7JIj_%EZ7Jlo>QaJ$A^;3gf|BmA7GLy$z`@$k)xC7B70&V#QX zB9$Lp=_%iT?@|Ga(5}-5{`*tTmi=fm9_HS+Ji^_xCF%#u87!dP*f_-eJAH&ZZNNG+mhO0J{@#O^#n-3D}8NrQl zgZ0(={mR)O{+9s?InXPd{aLZR7Yk9ibi>C>NnhUb22kGr`PwYU@WKAidf;YV+UBaT zvIuI#%`S=J7L|_2jr>EzMCRxYPv;f_Tk*G-B=%cS@U;N~kC;xG!YeZv*%*@T6Ctuu zhs_c~!$=F5mP7qS+IewJ=?w1+BWn6?9qS8%- z&%KoG(VKdFRA^Sy(i`*X)Uch)p@{0Lvr(UW!^q|v@9W;6pnaEtr(d2I&$t8lvjeqr z>sz0}m=1D5((+%rH`*X4InQjq`H9vfV^(vbeVBx=WAzv^JQR$8;2;BemM&=kM< zMC5nnNirw&QprUeN#VILop9PB5w=X3wydpxKXaMW;cSu-nUgMb z0J3AYhu}^!d`trNW&T;xP8#47H9}S?fK~1ELH)}$M7xG`x0Zg=@8DzOTz)ABTFhrS zoqGnGr7`$gtbBFK6c!TM#50`uDXo$`jhb8TK!5$-_@Sb2y5zMUhJ?dLF zW8)DmR%4vDKffEY!3pSDD_Pe!3kA4Qzj_8=7N%?5bK~Ng$~OHO5$jkg%HD6nZA?e| z5ebK^c!;TMtnXtWH0}MYts3v3%S(rsYhEk_Gx&tPV2)fU8ifNZ$}296IT<9{_q%7Fn-&BJ@wxn8l|{THf& zm4O^V<$0n)bo>Tll9(82wAwC^CD)B*F7e#&(Af~zZ29iK*HNNju~gqZ*%({HFdH({ zYdO+W%?8@k?R#0$0qfR%p)s9MKWp#>RKIGHFq|5)Rqw7V7a#Q8X%8?cPjwDywzkNx z?dG+aHBvdkqug6wqBG-J!@kJMqgl>wTcP7y1{x8dtD9C|6#fDxm0!Qx1>d=WrDchk z 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≪!YKZ4X`gTRvO6B2;*b!Ae1%9 z+2sf|?>?}J5l52GOI&>Cq-5Y?hDoYTy|}uimck)W$|a0)JI@|Zdw<4S)R-3ILO#e) zPtp`Bt6aQuTqThyw27#PV6QRmTmiKZ3(a&X8XHzvMfOhvsepN-SZY0N-S}4aWAca+ zqbP{@<~+MKzh$UeeyypVmcE+7FGiH2n#L0{<&E<|Dj$-(7x*aZ_#4vP`>eT3F!h8z zK$Z1EGAPjmmYKFkYh3Ogj*IMbwwuMQ(fcRpGTecl6!1?QN0t&0LY{9T7|tXoXns=^ zt*9FO)GByf?r}3@plPz?_(Eh~Am2kEJ-j@_%@?`ds^>jMNj9V)aR(VD{`1F63@zPv zuAklOl+{@n&dM!4cTWyh?&xvjKN$0r&Pm^e`=u0XeecsdzunUd+6z`cJ###_JEYc5 z5A|-JL$8NXLxolN(O+K;JC1_#97mk;C?09-g~Wuex#08ix`QbJU55b;0an?PC}zt; zH*4u+#XjzzJP64VX_?e&KECD^@Q0WdPumOMGLh+w7I+)*bW))9H!&CmPGAZ~ak z-)7&S>esJCqWgh_z;tuiDx#tL$XY9INAJAibL3Wi!>Z9`HIaqHQ9MDB;&(f|yakJR zU(Fj;t`KkQI7oE$azt!!5-LN;r%qSWowo%pyppGVvmX%1eg+5VnS@=nVb)8(q8Bt}@>=g|i

;0$uE6v((QsDH5Q?5W$vOY&dvnNO%q_?8<3ELxSczPf;?oVgmaFy1J( zVZyZ4~}sQEzbfvb*r4zJNpq(`!ctB%HlE#=g{b!#Kqrts=6N z_SC!qf;+2I#jG%qVqZl8TKA+6PdV2M$eFENM50*zis*rMjN3Eq|NbC?Bg3joqFZO^ zpqj$FD@mMx`0^x;e7XTcn%R^eO9)Rd8RaW{m^U6cI~HVLec?$S&ibLes3*6`<>++( ze1(QALNaK~L>Oe_suM`sM!YUgnC}w#dT`z2VK~6{E)5e`{q@y-VwOVo!nA+tBg02ny}WjRcj`sn1?G8$15Z} zdh5#M)z3iMv>H>MZq-Y-0`ebeL=#qe4_c>eJo%A?V2nOKuSXwVr~L$OWL^#sF6Su| z2QL5ASsP2H%sz?uvh#jZ22`P8uWgrjcfPW<*U8PmYjPw`Fjch~x)b$~^nsW5&7P~_ z#1R~mB~9xT>ESiDcYjqw%H)y>Q{Ff#_6Uf6sJ?&^#yQYCosI{|xfL`*7=gzRWc_1_ z$@eBLhtV+Zr^qc&*S;{q)Dh>Al)%B-9E0Dhl~QxV14-dWg)!%eO?d|SD3ea%BDav5 z{Kod4liYvK^FnfmUfiEu5U6rBZ+3TW?T_t&h(v?PZ4@Bo3JLKq9rJBE0osI~dYMq%izQ+2==M_fkKgcNsa%H6ZC<;%CFhPMZ!H z+JNBs@NFmJixz`}toE(vT4#EoFo9)MEq8PCDOyqW{H}mv47C%XIZaV*DniJ#4YTr*rc-%)RU9GYblE;}l z>I;e&jevtYY|&7^VE-hQh(6CQi$mTw*2u}5&^~b``gQ`Cj`CQkC1!)qDv@F8L{)WR ztvLsK$Rj)st>n$WLKgSFm?a}EsN+Rhv?lJbkBI{+^AzK4t-Jf;h-_ao#=_GA_3v>b z0l^O~N2GHRBIWG<{YK?QYRjze7SmJHVD13utERWRv2sM^5x^PL_3(Es z!NTf1IbMNz{k>!Ds9~S^mOllU;5csj)HO>U=pDW|m=a~e+sYVfo8kD1`y~6b;g}ag0u(Y+6|#ciY0#fT z4JM=gjY^yzH##;@C1WnFHP>(rDG)uWH;VmKZrLhgnb)|ue6z}zR$ed$=`IB7rtxyX z_{GQ3RTo!in6)Y)_!e$DYni0!O8DJ}s-%U3FM{(~xleyAC3tN(D@zMef^bN)bd>dz z;jWR@HsZJ);e8w`kqH$sM-zZ@Ty{3^Ner-UEEW5Rx-9y-Vr2A0 z6w`Dz>7IEb6_VGa>}Tg-J*G-UdbgjPc{E9sJ@;LNEhU}gFo%&5QWc2J9cnuAYOK!w5)1MN zeG)G9F=(R!*%Pl^0G0*fS0!#%#0yO%!s6{0gTu@2qQ2mL!`D4m*-sD`Bo8t_eEk@x zVxi1;OqATG;e`^nsT{Qt!KhZ!jJ(1%p@GYq9n@1K#`koSOs67G>4UJ2jU?h;SB;zV zkF#@%&*HN9DkT1C*r9a>7Yyo8mL!)Z1aL#UQPt;yl;jD}R_n4t_PX*>Pep^>Jc_;- zohs@hREZQt4k_mt;Ucw=^rG(mbh@wJV+-%Jne+c(fjUgS`3%$Kgf+4%?e@Ko(f76r z9brOsSBia%S?>%l^|63Dk4;v%vCXyPl#&PH7E0dFZo)BF zYerw*()^5h<{MznQEBEk-59dhe@#ZSS=A6Z;iQOvp?qiAr{bkCOjDs`09$~- zFP+6;Fg8cNKS21QsRx8B#vDF>iRF3=8B?m-^pk71M`(6Ys^~38$8inEQBNT-5_G`4 zP$npf&ruv#F1RiQlvA-5x-HQAmej1DS8wp|ZpP7lzk;rP7$?yrV~oy?Ap=VOUV9AR z7@(iiDBcKLVLs2~3AuS5xn5ROt=#9lX!9`#T^11iFoYYv%4gkMmBtI(U*KhaZz*t0 zW&FCo`#_H}qFQ&bqMIx$X`>r31sD=mF9%R2Vn%M>qQWwZPuO1CQ-e-PQMFD?)B8C2FnX(46Zmx6x8JL5C( zB4Fa2yCvm(>d(rNMTyOn`?~EmPbh@>{XgC)e&7wD>*)6SI|arY2`w-o2rk%Mnr5%#FT_q9I3!csY89hrfJx ziACSdy$pJpBk1zD!P3>+L&)A#gYQ$Od$rorCD?PN?T>{uXr5M48^&YR%>bD|~&52$+3iZlG|^_Bztw$DiibiLE=d zT{iS+_PAv+4sWfh3|H@B6C1Uma;^sbIN2>ywMJo$lrGME&6yuM_uYCgkg40NGOW7S zwes+%oU8v>&DMBoV1!|HF#;MoTil>ok!_K<+CI~BC$ZPk{W5CHoS-n6ZA7sVeeXN| z^DDX1E**XBwI7ZjfA$+n*3z-xZz9rEvrN@WK9>|OnKl777{tt(LqE_hsc}x3*Yt8Q zlibbZDtsdrEg#Q-5Iy+3(g;eqa3L~AUW>q~YjRC#QJC|NMMsJ!N!B7?m0LUAQuZaR zT7ZmecrBu$vQMk`E~i+EnUjp_UN-ZwNcx?M$7U624u@GI`{@5>0hD z`&DtVxqVn+C?zTAk6b4dstG1SEHjFdLiz?SDc?kJ*L5B;e!nKw=O%M+65_Phfgh&~ z7adCkl{aF&^~=vputmV}4-u*8cboo#cX2$s;j5L=uH=Ju49Ah0fMoRZC~9Lfu59)D zl5BYY6yU^K@$d{YsLrod>-K-!QGkk-pT`K39LHQP-y4mP-e&fh#Gj4XjwQ_ENUQHT zjbKxo(sB4*rTyWnec7Ob8rBaInb8N#k&Jz9)HGk?E(U(b(sX!yboON<>~_fIhtabU zIpsHsdXiC39@d1;vadF6T`cU7@udoF(j-U8`7^acT}Bm{?`;S&Jm*q4Zg=3WXAe?-U@rn3WJGyo%`xk$%(9f;W!&!eGTg4ztLC>hJyNSC>7vB7&DG% zg}=DP%LX1UMk*=9g!oOo9Z}U+hz(abqXaeCvz_^&|Vk?!dm9_DOSJTVg0NT^@nAxdax=8SGf!H2TJ5=VE$o z4f(%FESp};O^s3dVavrz$*zvw;V~iBoeE-JqSCa;Zq4{nHzws4fvIoet&BFKjkV{% z_7a!2a)YxJovHA9_d4t4elBw#GTd&43&qxa$86@!G+(jIQ*yzLo)wkD)pyI8I0CcN ztAoxz^qjHK7e?y!5JUATj!`?Amo>u0NJn!bKs9#EPMHIqlq#`g5}=<$Z0IuqZ@5Z( zW_q@X~8$!GxB^eAiQ1Fm>{eB zSSr#!`8cKX0Zdzr0wVKX1sW>Wp@FxsZz>3j4w0@|*Or@ut8W~!iLXz)x}VvQmyH$! zx*Ah zj-sSw_YJ3fwS7X9fvZ|J6w@1))*r(Fi*msYHyZ^?DkX^cR8VI@+~8o)W@FiRnOx79 zMMyEqE7F|We~2m+y*Xi$09K)?Ev5Tg&asS^^T)YUKFVR4R9?Ur{;37^MoR6;rx!;N z2IrgeMs;|L{i()^0uvzXPD}b(%ZTHhwG|bzY*m?C@!!USo8xSxCky&loY>#cF4 z)|I)vgFUT;zAwwP-9kNHmKr_Njg76IUS947GDDV&BIqrXA0HdT)k#3{^sGhTR|reN zL>PvDFpuBRPioC)QAx%VTmGOzilYs`V*)tma*Lj=eC2^~7H`94ok*6tg!!-|$Ta;cp1j*jG_JN- zCYIjM#z@>qcolb=L4o75QXQe=tBz<#cuF(EDEBu!*y;1r_SbSq6#g^5DmMpXwi3r9 ztcVG|5ykZ*0HJVwV*0gM3^OKIBL@G&X#0=y=f_8e=KCIBW}C8pURtgp_110i6mKy1 zW}(9PbMYP;`E6Mva*$H-r)01`5!*)2oi&-<5f`PpWTUFS&i?Ix(0-Mk4i})lOXTaQ zpmIBJ_>0Bu_cB(%!2^JUN@w7?CHriQ((+5mq-q0ho4)t(nvcgQTLx;Xf5vphq?Wsp z`VnFAW*iii*M1x*er=@Br?44@Q#$4Ig91Xk2R?y33Q8A12$y ze3Y*~C&sE!M7wH)!sCc>{Z0XniSPPZT*oapuM2EA#^bl%Dv@s!DUu9dVmaq9GlGEU zhf{a1&A9bTV>|iGQ!~%x2`!|YzS5|TPRIQ@wrk_$cid9~H7(Z=z1*Yp51W=8Nz1=@ zap7edIxJcFXVS7hh7-V_MOXTMK2x46B+JiIt)#!9lmmbe{QHQ@u_M{?j68n zroN@Dy7#K%G_FIT#ute9Q9;XV7tHwmX}qDq(Wo_8fI+YZ4;eIzy7szUCOp(GRmc4u z(`S+o9t)afR32T?1({R_q;G@nYQ@?{87!K=|JDa7D7=7_QNLqLlMUjuJ||(_9)9)X zc@IoAmi)Q};`Z(gJMOsHFnVaQ)EJIW-UkC56%6$umv`qxwGg35I?Q=9MVLAS>%}%Cs$sCl%+E1s5yKJK6vRm$TxdcEGjf z#E*rEoJ~vi{Sx(a=OLxHZqt~+f@w=IzxU044#qeheEwqJ#fXFu62r7kVQUTtN1rNu@Ozgn^in2NJ2$hg=Ll2FBY5{*fh~oO=r=RdUwTi?WiK< zo3}XL2BId~kBXqr#W2rbA5Lxo_#MwcqNGQ_DCR_zswt(kjfgK(^8uAJnY0WUY!3MC zLOQX$BMt3U6PzFZm4J`TQa9y|G3)ga_OS#eCO9V)fYII?OI$xg0(%2N5JlfJuulO% zZ(&ZP#CRgZ!cYJ~P>(ILFhwB}60i)`=!>qe5C{l@K^0men8EY_6Q-C!xRpeK33|Z8 zycv@I$0U0zi0kl?^+$o!iwBnYe^JdWtdCUlBh{>p`A9WCQq7N4^CQ*#NHsrF&5u;` zBh~y!H9u0#k5uy`)%-{`KT^$)RP!U%{75xFQq7N4^CQ*#NHsrF&5u;`Bh~y!H9u0# zk5uy`)%-{`KT^$)RP!U%{75xFQq7N4^CQ*#NHsrF&5u;`Bh~y!H9u0#|MwZ}|39jk znGFPjeI^WS!wiMqK;y*VM1+M!g2WI-1y$YLRRu-;#gK*GI=M(oJ3Gk=`HG>6ns})2 z*xBavuuu;h}4 z!N0iX(x152$A9s6d$}^QrR(wr`VaT(*z+3oEG_+16?9V<@exC@b(iA_4dPPsF%D#?;KwQCi4f3{gZ#Jt#<7P&5e0w2+WUoLHPcoS(0+UywhdpHFnbw`d=Kv zf0UeWp&k|G?lHwFe!f6fBERLNXMX(}?Bfq)(KoidJjw^iEu62fk6)aB?kU{a#l>0B zDI)N3dI|*nPm#|r&VbPA*~PiiPM_{q@<|_5H>9xz8#1 z{QT_h%=;AX?(F{~3fz45_vSy}qMl!zp5Hzsb$W5;dx{J^?DX>TL;(=;6n{4KwsUno1tR|^HuMGohxdT~v-S7G6F|j* z`X@jR&>lAQRzvPoQ8$0DOmM%?VIUlUGWvU(K0$oub0f73R_cpbi?bI`O5^EIgA_T-7GZ| z^DlS2onbGQ^naxQ-_I+?LYmSJ)9x)}T9DV&dR)p@<;BNq%#DeOUt`3(ms#JqBe~$c z51VJ!)|NFqn%oUM{i`>8D4E>-%hPO|JlBOvC6jxv{oh|R5%Vega43ntcDeD7wE70_ z>6<*N4l8f)n!513MfWB4cZC;i&N^N{DPYad?(x&1>B7-2mwQ?3-NUAxFS%GTz4_Zc zfn0l5wU}RVK1qxog|oQQuivUj+1LJ$TQcVzSHZXYIzpekUMHpY^hE#ot+b#2f?mP) zJ0}cGcdS^qWn*iO%r8}w2agT~F*x{HetB{8w{1w@)(>CzF&zJY>cC>g)ZIMYw?a3^ zu8Dmz)1c}&u{A1ed-$Vfeg3th*VdXxcJXYR+}VHYlA8Lw zh!a^09a|H;wl;s?=Pk~#gUz3B_6obBMYj&NWY2n(@b?tUv%4=7{z#k-_#HZ(|Kh*r zl`~oPz31F8O+haA!v_V%d#6?2yyN!$b5&VwbJ4Qv2JuC&+W+*jE|5J{m->F*;)RBL za@x8t|4;dNY`W&+m~7F`IeMzkt?w_}xLW1({n}(Z`7)oRNoOgt66sP$JF9H zk8kr{oL?|o_C4D(m%8JZckj#e<&^eZ`KkNc5vB`|8vbU?{~7wm`|F=STUWUA1PXli z4`eW`ZvQ`}-Rk|;Cp#B0JQ8w?%M=iutdOre`FmW>{(a)C6Y4!e6<4m@5^y@PMAg=! z>uc1Qq7(X9*XI5l zZD-ZE|E)TGhLW=TycfMYzLr&pTj5j0?yF7wo0gf^)UfL7eKgp7?Vxr}2>B525<86Dm@<*#L-}&zkKtGW#P8_nUf=4XRWPf*OS#wdzyAY zRycRhtx0=UMJw1RXx}^DxpLR^LSK))*-rCPIFCOKb=00FF8uQB>C?g%4oj^qe(M`Q zyZ9q?b(nk3%=eFG{+ zk9sC@?C_qe`!xNdWb>H4C@<22W1Au;Tb>VPDhva;I195xZ-o6tH=Q`mP;+D&|a{ z`1)uMcYqFq?uib*te$=QPrKJn)l=8Ycjwzy!ftVfQ(diS`edD1m5x^xF8!#h_U4*? zVnPG2`bNbL>m?gr%sd)>DNE{-#kAVW8DDe`M`bVXk3auO&*O06$G*$aY{%{xwz~SC z&zH2zyj(Kv(>e_aYyS2$0as_ua{(LkQ<*zNT$tUrC*7@6Nm?kgOIh~keq}ZRS-tct zZq?p@CtbNXHIV&-{e4YFuD0tp?}G|R_%5Zqw0vM8Y?oA!lUZD1U~q+ziJ66!jh!n( zr7X3mI5R&lQYEn{IU^Iu3sEV_FNjddPs&P7E-4mbU~F3uFTn2??44Sfn&JpmbdiHI zq$oeXq=9icH;=f4q?BB!N?vJB&ShRcegR>zaKB)^?9|HQC?E|rC`=_eC$YGAk)Tim zQv>rN5zz*g2G$0)ki5j))OZ0gpj2u}a$-qhPJX&>QEFOhQEFatYDi{sejdn7X&JEv z3mVui$tx%-ML|pgX^em{Q;TE#f?YC`OMo6pEUH|js2t%J><{(;hoF>-rjfa)PhfC# zVn#uAQ)_!?Pv3+|(>HA0vv=QtqZe*I1KlwJ1dN~?B|tz0Lcz&TpRz88Gcd4y&xC}c z%TNo&sFcjayhJ@3hUM-) { System.setProperty("compose.layers.type", "WINDOW") if (isMacOs()) { // Must be set before AWT Toolkit init (do not call getString / Compose here). - // Value matches Res.string.app_name in values / values-ru. - System.setProperty("apple.awt.application.name", "FromChat") + // Matches Res.string.app_name / app_name_beta. + System.setProperty( + "apple.awt.application.name", + if (AppBuildInfo.isDebug) "FromChat Beta" else "FromChat", + ) System.setProperty("apple.laf.useScreenMenuBar", "true") } if (!DesktopSingleInstance.acquireOrForward(args)) return @@ -229,30 +237,38 @@ fun main(args: Array) { args.filter { DesktopDeepLinkBus.isFromChatUri(it) } .forEach { DesktopDeepLinkBus.handleUri(it) } + val dockIconImage = loadAppIconBufferedImage(tray = false) + applyDockIcon(dockIconImage) + // Re-apply after AWT is fully up — Taskbar can ignore early sets on macOS :run. + SwingUtilities.invokeLater { applyDockIcon(dockIconImage) } + application { UtilsLibrary.init() DesktopApplicationBootstrap.launchOnApplicationStart() - val windowState = rememberWindowState(size = remember { DesktopWindowPrefs.loadSize() }) - val aboutWindowState = rememberWindowState( - position = WindowPosition.Aligned(Alignment.Center), - size = DpSize(440.dp, 640.dp), + val windowState = rememberWindowState( + size = remember { DesktopWindowPrefs.loadSize() }, + position = remember { DesktopWindowPrefs.loadPosition() }, ) var windowVisible by remember { mutableStateOf(true) } - var aboutOpen by remember { mutableStateOf(false) } val trayState = rememberTrayState() + // BufferedImage.toPainter() keeps the AWT pixels (avoids blank BitmapPainter round-trip). val trayIcon = remember { loadAppIconPainter(tray = true) } - val windowIcon = remember { loadAppIconPainter(tray = false) } + val windowIcon = remember { + dockIconImage?.toPainter() ?: loadAppIconPainter(tray = false) + } val traySupported = remember { java.awt.SystemTray.isSupported() } val mac = remember { isMacOs() } - val appName = stringResource(Res.string.app_name) + val appName = stringResource( + if (AppBuildInfo.isDebug) Res.string.app_name_beta else Res.string.app_name, + ) val aboutApp = stringResource(Res.string.desktop_about_app) val trayShow = stringResource(Res.string.desktop_tray_show) val quit = stringResource(Res.string.desktop_quit) - LaunchedEffect(windowState.size) { + LaunchedEffect(windowState.size, windowState.position) { delay(3_000) - DesktopWindowPrefs.saveSize(windowState.size) + DesktopWindowPrefs.save(windowState.size, windowState.position) } DisposableEffect(trayState) { @@ -267,12 +283,17 @@ fun main(args: Array) { } } + fun openAbout() { + windowVisible = true + DesktopMenuCommands.emit(DesktopMenuCommand.OpenAbout) + } + LaunchedEffect(Unit) { if (!mac || !Desktop.isDesktopSupported()) return@LaunchedEffect val desktop = Desktop.getDesktop() if (desktop.isSupported(Desktop.Action.APP_ABOUT)) { desktop.setAboutHandler { - SwingUtilities.invokeLater { aboutOpen = true } + SwingUtilities.invokeLater { openAbout() } } } } @@ -285,7 +306,7 @@ fun main(args: Array) { onAction = { windowVisible = true }, menu = { Item(trayShow) { windowVisible = true } - Item(aboutApp) { aboutOpen = true } + Item(aboutApp) { openAbout() } Separator() Item(quit) { exitApplication() } }, @@ -327,7 +348,7 @@ fun main(args: Array) { true } event.isShiftPressed && event.key == Key.A -> { - aboutOpen = true + openAbout() true } event.isShiftPressed && event.key == Key.N -> { @@ -349,6 +370,10 @@ fun main(args: Array) { LaunchedEffect(window, appName) { window.title = appName enableEdgeToEdgeTitleBar(window.rootPane) + dockIconImage?.let { image -> + window.iconImages = listOf(image) + applyDockIcon(image) + } } DisposableEffect(Unit) { AppForeground.setForeground(true) @@ -389,17 +414,6 @@ fun main(args: Array) { App() } } - - if (aboutOpen) { - Window( - onCloseRequest = { aboutOpen = false }, - title = aboutApp, - state = aboutWindowState, - icon = windowIcon, - ) { - DesktopAboutContent(onClose = { aboutOpen = false }) - } - } } } @@ -515,43 +529,191 @@ private fun enableEdgeToEdgeTitleBar(rootPane: JRootPane) { rootPane.putClientProperty("apple.awt.windowTitleVisible", false) } +private fun applyDockIcon(image: BufferedImage?) { + if (image == null) { + Logger.w("DesktopIcon", "applyDockIcon skipped — image is null") + return + } + runCatching { + if (!Taskbar.isTaskbarSupported()) { + Logger.w("DesktopIcon", "Taskbar unsupported; dock icon not set") + return + } + val taskbar = Taskbar.getTaskbar() + if (taskbar.isSupported(Taskbar.Feature.ICON_IMAGE)) { + taskbar.iconImage = image + Logger.i("DesktopIcon", "Taskbar dock icon set (${image.width}x${image.height})") + } else { + Logger.w("DesktopIcon", "Taskbar.Feature.ICON_IMAGE unsupported") + } + }.onFailure { error -> + Logger.w("DesktopIcon", "Failed to set dock icon: ${error.message}") + } +} + /** - * Loads the desktop tray or window icon from packaged resources. - * Prefers PNG, then WebP; returns a tiny empty bitmap only if every decode fails. + * Loads the desktop tray or window/dock icon from packaged resources. + * Tray prefers the flat mark (`app_icon`); dock/window prefer the gradient (`app_window_icon`). + * + * Uses [BufferedImage.toPainter] so Compose Tray/Window hand the same AWT pixels to the OS + * (BitmapPainter → ImageBitmap round-trips can rasterize blank and fall back to Compose's default). */ private fun loadAppIconPainter(tray: Boolean): Painter { + val image = loadAppIconBufferedImage(tray) + if (image == null) { + Logger.e( + "DesktopIcon", + "loadAppIconPainter fell through — no resource decoded (tray=$tray); using solid fallback", + ) + return solidFallbackIcon().toPainter() + } + Logger.i( + "DesktopIcon", + "loadAppIconPainter ok tray=$tray size=${image.width}x${image.height} type=${image.type}", + ) + return image.toPainter() +} + +private fun loadAppIconBufferedImage(tray: Boolean): BufferedImage? { val names = if (tray) { listOf("app_icon.png", "app_icon.webp", "app_window_icon.png", "app_window_icon.webp") } else { listOf("app_window_icon.png", "app_window_icon.webp", "app_icon.png", "app_icon.webp") } val loaders = listOfNotNull( - Thread.currentThread().contextClassLoader, DesktopApplicationBootstrap::class.java.classLoader, + Thread.currentThread().contextClassLoader, ClassLoader.getSystemClassLoader(), - ) + ).distinct() for (name in names) { - for (loader in loaders) { - val stream = loader.getResourceAsStream(name) - ?: loader.getResourceAsStream("/$name") + val bytes = readClasspathBytes(name, loaders) + ?: readFileFallbackBytes(name) + ?: continue + if (bytes.isEmpty()) continue + val decoded = decodeImageBytes(bytes, name) ?: continue + if (decoded.width < 16 || decoded.height < 16) { + Logger.w("DesktopIcon", "Skipping $name — decoded size ${decoded.width}x${decoded.height}") + continue + } + // Ensure TYPE_INT_ARGB so AWT Tray/Taskbar get a predictable raster. + val argb = ensureArgb(decoded) + val image = if (tray) scaleBufferedImage(argb, 64) else argb + Logger.i("DesktopIcon", "Loaded $name (${image.width}x${image.height}) tray=$tray") + return image + } + Logger.e("DesktopIcon", "No icon resource found for tray=$tray (tried $names)") + return null +} + +private fun readClasspathBytes(name: String, loaders: List): ByteArray? { + val paths = listOf(name, "/$name") + for (loader in loaders) { + for (path in paths) { + val stream = loader.getResourceAsStream(path) ?: continue + val bytes = runCatching { stream.use { it.readBytes() } } + .onFailure { error -> + Logger.w("DesktopIcon", "Failed reading $path from $loader: ${error.message}") + } + .getOrNull() ?: continue - val bytes = runCatching { stream.use { it.readBytes() } }.getOrNull() ?: continue - if (bytes.isEmpty()) continue - val bitmap = runCatching { - Image.makeFromEncoded(bytes).toComposeImageBitmap() - }.onFailure { error -> - Logger.w("DesktopIcon", "Failed to decode $name: ${error.message}") - }.getOrNull() ?: continue - if (bitmap.width < 16 || bitmap.height < 16) { - Logger.w("DesktopIcon", "Skipping $name — decoded size ${bitmap.width}x${bitmap.height}") - continue + if (bytes.isNotEmpty()) { + Logger.i("DesktopIcon", "Classpath hit $path via $loader (${bytes.size} bytes)") + return bytes } - Logger.i("DesktopIcon", "Loaded $name (${bitmap.width}x${bitmap.height}) tray=$tray") - return BitmapPainter(bitmap) } } - - Logger.w("DesktopIcon", "No app icon resource decoded; using empty placeholder") - return BitmapPainter(ImageBitmap(32, 32)) + // Explicit class resource (works when context CL is a filtered compose run CL). + for (path in paths) { + val stream = DesktopApplicationBootstrap::class.java.getResourceAsStream(path) ?: continue + val bytes = runCatching { stream.use { it.readBytes() } }.getOrNull() ?: continue + if (bytes.isNotEmpty()) { + Logger.i("DesktopIcon", "Class resource hit $path (${bytes.size} bytes)") + return bytes + } + } + return null +} + +/** Last resort when classpath packaging under `:run` omits resources. */ +private fun readFileFallbackBytes(name: String): ByteArray? { + val candidates = listOf( + File("app/desktop/src/main/resources", name), + File("src/main/resources", name), + File(System.getProperty("user.dir"), "src/main/resources/$name"), + File(System.getProperty("user.dir"), "app/desktop/src/main/resources/$name"), + ) + for (file in candidates) { + if (!file.isFile) continue + val bytes = runCatching { file.readBytes() }.getOrNull() ?: continue + if (bytes.isNotEmpty()) { + Logger.i("DesktopIcon", "File fallback hit ${file.absolutePath} (${bytes.size} bytes)") + return bytes + } + } + return null +} + +private fun decodeImageBytes(bytes: ByteArray, name: String): BufferedImage? { + val viaImageIo = runCatching { + ImageIO.read(ByteArrayInputStream(bytes)) + }.onFailure { error -> + Logger.w("DesktopIcon", "ImageIO failed for $name: ${error.message}") + }.getOrNull() + if (viaImageIo != null) return viaImageIo + + return runCatching { + val skia = SkiaImage.makeFromEncoded(bytes) + bufferedImageFromComposeArgb(skia.toComposeImageBitmap()) + }.onFailure { error -> + Logger.w("DesktopIcon", "Skia decode failed for $name: ${error.message}") + }.getOrNull() +} + +private fun ensureArgb(source: BufferedImage): BufferedImage { + if (source.type == BufferedImage.TYPE_INT_ARGB) return source + val out = BufferedImage(source.width, source.height, BufferedImage.TYPE_INT_ARGB) + val graphics = out.createGraphics() + graphics.drawImage(source, 0, 0, null) + graphics.dispose() + return out +} + +private fun bufferedImageFromComposeArgb( + bitmap: androidx.compose.ui.graphics.ImageBitmap, +): BufferedImage { + val w = bitmap.width + val h = bitmap.height + val pixels = IntArray(w * h) + bitmap.readPixels(pixels) + val out = BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB) + out.setRGB(0, 0, w, h, pixels, 0, w) + return out +} + +private fun scaleBufferedImage(source: BufferedImage, size: Int): BufferedImage { + if (source.width == size && source.height == size) return source + val out = BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB) + val graphics = out.createGraphics() + graphics.setRenderingHint( + RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR, + ) + graphics.setRenderingHint( + RenderingHints.KEY_RENDERING, + RenderingHints.VALUE_RENDER_QUALITY, + ) + graphics.drawImage(source.getScaledInstance(size, size, Image.SCALE_SMOOTH), 0, 0, null) + graphics.dispose() + return out +} + +/** Opaque mark so Tray never substitutes the Compose default for a blank painter. */ +private fun solidFallbackIcon(): BufferedImage { + val out = BufferedImage(32, 32, BufferedImage.TYPE_INT_ARGB) + val graphics = out.createGraphics() + graphics.color = java.awt.Color(0x1A, 0x73, 0xE8) + graphics.fillRoundRect(2, 2, 28, 28, 8, 8) + graphics.dispose() + return out } diff --git a/app/shared/src/commonMain/composeResources/values-ru/strings.xml b/app/shared/src/commonMain/composeResources/values-ru/strings.xml index 1d96884..1e19d0a 100644 --- a/app/shared/src/commonMain/composeResources/values-ru/strings.xml +++ b/app/shared/src/commonMain/composeResources/values-ru/strings.xml @@ -1,6 +1,7 @@ FromChat + FromChat Beta Назад Настройки Главная diff --git a/app/shared/src/commonMain/composeResources/values/strings.xml b/app/shared/src/commonMain/composeResources/values/strings.xml index cf2ef32..761a464 100644 --- a/app/shared/src/commonMain/composeResources/values/strings.xml +++ b/app/shared/src/commonMain/composeResources/values/strings.xml @@ -2,6 +2,7 @@ FromChat + FromChat Beta Back diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/desktop/DesktopMenuCommands.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/desktop/DesktopMenuCommands.kt index e89464e..91ead2a 100644 --- a/app/shared/src/commonMain/kotlin/ru/fromchat/desktop/DesktopMenuCommands.kt +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/desktop/DesktopMenuCommands.kt @@ -9,6 +9,8 @@ enum class DesktopMenuCommand { NewChat, SearchConversations, EnterChatListSelection, + /** Open the in-app Settings → About screen (not a separate window). */ + OpenAbout, } /** diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/App.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/App.kt index f7f6e35..55ccc97 100644 --- a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/App.kt +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/App.kt @@ -1,7 +1,5 @@ package ru.fromchat.ui -import androidx.compose.animation.AnimatedContent -import androidx.compose.animation.AnimatedContentScope import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition import androidx.compose.animation.SharedTransitionLayout @@ -11,7 +9,6 @@ import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.scaleIn import androidx.compose.animation.scaleOut -import androidx.compose.animation.togetherWith import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.SnackbarDuration @@ -30,16 +27,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver -import androidx.navigation.NamedNavArgument import androidx.navigation.NavBackStackEntry import androidx.navigation.NavController -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController -import androidx.navigation.navArgument import coil3.ImageLoader import coil3.compose.setSingletonImageLoaderFactory import coil3.network.ktor3.KtorNetworkFetcherFactory @@ -84,8 +77,8 @@ import ru.fromchat.api.local.send.OutgoingMessageCoordinator import ru.fromchat.api.schema.websocket.WebSocketMessage import ru.fromchat.api.schema.websocket.types.WebSocketUpdatesData import ru.fromchat.config.ServerConfig -import ru.fromchat.legal.DocumentScreen -import ru.fromchat.legal.DocumentType +import ru.fromchat.desktop.DesktopMenuCommand +import ru.fromchat.desktop.DesktopMenuCommands import ru.fromchat.notifications.NotificationLaunchCoordinator import ru.fromchat.ui.auth.AuthScreen import ru.fromchat.ui.auth.captcha.SmartCaptchaNav @@ -93,67 +86,43 @@ import ru.fromchat.ui.auth.captcha.SmartCaptchaScreen import ru.fromchat.ui.auth.yandex.YandexOAuthNav import ru.fromchat.ui.auth.yandex.YandexOAuthScreen import ru.fromchat.ui.calls.CallOverlay -import ru.fromchat.ui.chat.panels.dm.DmChatRoute -import ru.fromchat.ui.chat.panels.dm.DmNav -import ru.fromchat.ui.chat.panels.dm.DmProfileRoute import ru.fromchat.ui.chat.panels.dm.navigateToDmChat -import ru.fromchat.ui.chat.panels.publicchat.PublicChatChatRoute import ru.fromchat.ui.chat.panels.publicchat.PublicChatNav -import ru.fromchat.ui.chat.panels.publicchat.PublicChatProfileRoute import ru.fromchat.ui.chat.panels.publicchat.navigateToPublicChat import ru.fromchat.ui.main.ConversationListDetailShell +import ru.fromchat.ui.main.DesktopChatsDetailNavHost +import ru.fromchat.ui.main.DesktopContactsDetailNavHost +import ru.fromchat.ui.main.DesktopSettingsDetailNavHost import ru.fromchat.ui.main.DesktopTabDetailHosts -import ru.fromchat.ui.main.EmptyContactsPlaceholder -import ru.fromchat.ui.main.EmptyConversationPlaceholder -import ru.fromchat.ui.main.EmptySettingsPlaceholder +import ru.fromchat.ui.main.LocalDesktopChatsNavController import ru.fromchat.ui.main.LocalDesktopMainTab +import ru.fromchat.ui.main.LocalDesktopSettingsNavController import ru.fromchat.ui.main.MAIN_PAGE_CHATS import ru.fromchat.ui.main.MAIN_PAGE_CONTACTS import ru.fromchat.ui.main.MAIN_PAGE_SETTINGS import ru.fromchat.ui.main.MainScreen import ru.fromchat.ui.main.chats.ChatsSearchScreen +import ru.fromchat.ui.main.conversationDetailDestinations import ru.fromchat.ui.main.navigateReplacingMainDetail -import ru.fromchat.ui.main.settings.LOG_FILE_OPEN_RESULT_KEY -import ru.fromchat.ui.main.settings.LogFilesScreen -import ru.fromchat.ui.main.settings.LogsScreen -import ru.fromchat.ui.main.settings.AboutScreen -import ru.fromchat.ui.main.settings.AppearanceScreen -import ru.fromchat.ui.main.settings.DevicesScreen -import ru.fromchat.ui.main.settings.NotificationsScreen +import ru.fromchat.ui.main.profileDetailDestinations import ru.fromchat.ui.main.settings.SettingsRoutes -import ru.fromchat.ui.main.settings.account.AccountScreen -import ru.fromchat.ui.main.settings.account.changepassword.ChangePasswordScreen -import ru.fromchat.ui.main.settings.account.changeyandex.ChangeYandexConfirmScreen -import ru.fromchat.ui.main.settings.account.changeyandex.ChangeYandexDoneScreen -import ru.fromchat.ui.main.settings.account.changeyandex.ChangeYandexOAuthScreen -import ru.fromchat.ui.main.settings.account.delete.DeleteAccountScreen -import ru.fromchat.ui.main.settings.server.ServerConfigScreen -import ru.fromchat.ui.profile.EditProfileFocusField -import ru.fromchat.ui.profile.EditProfileScreen +import ru.fromchat.ui.main.settingsDetailDestinations import ru.fromchat.ui.profile.ProfileRoutes -import ru.fromchat.ui.profile.ProfileScreen -import ru.fromchat.ui.components.AppPanel import ru.fromchat.ui.components.LocalPaneHazeState import ru.fromchat.ui.components.ScreenSurface -import androidx.compose.foundation.shape.RoundedCornerShape import dev.chrisbanes.haze.rememberHazeState import ru.fromchat.utils.NetworkConnectivity val LocalNavController = compositionLocalOf { error("NavController not provided") } -private fun isConversationChatRoute(route: String?): Boolean = - route == PublicChatNav.CHAT_ROUTE || - (route != null && route.startsWith("dm/") && "/chat" in route) - -private fun isConversationProfileRoute(route: String?): Boolean = - route == PublicChatNav.PROFILE_ROUTE || - (route != null && route.startsWith("dm/") && route.endsWith("/profile")) - private fun isStandaloneProfileRoute(route: String?): Boolean = route != null && route.startsWith("profile/") && !route.startsWith(ProfileRoutes.Edit.substringBefore("?")) +private fun isEditProfileRoute(route: String?): Boolean = + route != null && route.startsWith("profile/edit") + /** * Nav destination.route is the pattern (`profile/{userId}…`), not the filled path — * read the userId from entry args / saved state. @@ -164,40 +133,6 @@ private fun standaloneProfileUserId(entry: NavBackStackEntry?): Int? { return entry.savedStateHandle.get("userId")?.toIntOrNull()?.takeIf { it > 0 } } -private fun isConversationShellRoute( - route: String?, - previousRoute: String?, - ownUserId: Int?, - profileUserId: Int?, -): Boolean { - if (route == "chat" || isConversationChatRoute(route) || isConversationProfileRoute(route)) { - return true - } - if (isStandaloneProfileRoute(route)) { - if (isConversationChatRoute(previousRoute)) return true - return ownUserId != null && profileUserId == ownUserId - } - if (route != null && route.startsWith("settings/")) return true - if (route == "about") return true - if (route == SettingsRoutes.ServerConfig) { - return previousRoute == "chat" || - previousRoute == "about" || - (previousRoute != null && previousRoute.startsWith("settings/")) - } - return false -} - -private fun isSettingsDetailRoute(route: String?): Boolean { - if (route == null) return false - if (route.startsWith("settings/") || route == "about") return true - return route == SettingsRoutes.ServerConfig -} - -private fun dmUserIdFromRoute(route: String?): Int? { - if (route == null || !route.startsWith("dm/")) return null - return route.substringAfter("dm/").substringBefore("/").toIntOrNull()?.takeIf { it > 0 } -} - private val rootNavTween = tween(durationMillis = 250, easing = FastOutSlowInEasing) private fun rootNavEnterTransition(): EnterTransition = @@ -278,18 +213,6 @@ private fun handlePresenceEvent(message: WebSocketMessage) { } } -private fun NavGraphBuilder.settingsComposable( - route: String, - arguments: List = emptyList(), - content: @Composable AnimatedContentScope.(NavBackStackEntry) -> Unit, -) { - composable( - route = route, - arguments = arguments, - content = content, - ) -} - @Composable fun App( scrollToMessageId: Int? = null, @@ -336,9 +259,7 @@ fun App( } startDestination = when { - hasToken && startAtDmConversationUserId != null -> "chat" - hasToken && startAtPublicChat -> "chats/publicChat" - hasToken && !startAtPublicChat -> "chat" + hasToken -> "chat" else -> "welcome" } @@ -416,6 +337,9 @@ fun App( FromChatTheme { SharedTransitionLayout { val navController = rememberNavController() + val chatsDetailNavController = rememberNavController() + val settingsDetailNavController = rememberNavController() + val contactsDetailNavController = rememberNavController() val profileLookupSnackbarHostState = remember { SnackbarHostState() } LaunchedEffect(profileLookupErrorMessage) { profileLookupErrorMessage?.let { message -> @@ -429,11 +353,16 @@ fun App( } } + val widthSizeClass = currentWindowAdaptiveInfo().widthSizeClass + val isDesktopListDetail = widthSizeClass != WindowWidthSizeClass.COMPACT + var pendingMainTab by remember { mutableIntStateOf(MAIN_PAGE_CHATS) } + // Handle startup/deep-link navigation targets (profile links) LaunchedEffect( startAtProfileUserId, startAtProfileUsername, - startDestination + startDestination, + isDesktopListDetail, ) { Logger.d( "ProfileDeepLink", @@ -449,7 +378,19 @@ fun App( "ProfileDeepLink", "navigating by deep link userId=$startAtProfileUserId" ) - navController.navigate("profile/$startAtProfileUserId?fromDeepLink=true") + val route = "profile/$startAtProfileUserId?fromDeepLink=true" + val ownId = ApiClient.user?.id + if (isDesktopListDetail) { + if (ownId != null && startAtProfileUserId == ownId) { + pendingMainTab = MAIN_PAGE_SETTINGS + settingsDetailNavController.navigateReplacingMainDetail(route) + } else { + pendingMainTab = MAIN_PAGE_CHATS + chatsDetailNavController.navigateReplacingMainDetail(route) + } + } else { + navController.navigate(route) + } } else { val trimmedUsername = startAtProfileUsername?.trim() if (!trimmedUsername.isNullOrBlank()) { @@ -457,11 +398,30 @@ fun App( "ProfileDeepLink", "navigating by deep link username=$trimmedUsername" ) - navController.navigate("profile/$trimmedUsername?fromDeepLink=true") + val route = "profile/$trimmedUsername?fromDeepLink=true" + if (isDesktopListDetail) { + pendingMainTab = MAIN_PAGE_CHATS + chatsDetailNavController.navigateReplacingMainDetail(route) + } else { + navController.navigate(route) + } } } } + LaunchedEffect(startDestination) { + if (startDestination == null || startDestination == "welcome") { + return@LaunchedEffect + } + if (!startAtPublicChat) return@LaunchedEffect + if (isDesktopListDetail) { + pendingMainTab = MAIN_PAGE_CHATS + chatsDetailNavController.navigateToPublicChat() + } else { + navController.navigateToPublicChat() + } + } + LaunchedEffect(startDestination) { if (startDestination == null || startDestination == "welcome") { return@LaunchedEffect @@ -475,10 +435,21 @@ fun App( "navigating to dm user=${target.dmConversationUserId} " + "messageId=${target.scrollToMessageId} launchId=${target.launchId}" ) - navController.navigateToDmChat( - otherUserId = target.dmConversationUserId, - sourceMessageId = target.scrollToMessageId, - ) + if (isDesktopListDetail) { + pendingMainTab = MAIN_PAGE_CHATS + if (navController.currentBackStackEntry?.destination?.route != "chat") { + navController.popBackStack("chat", inclusive = false) + } + chatsDetailNavController.navigateToDmChat( + otherUserId = target.dmConversationUserId, + sourceMessageId = target.scrollToMessageId, + ) + } else { + navController.navigateToDmChat( + otherUserId = target.dmConversationUserId, + sourceMessageId = target.scrollToMessageId, + ) + } } target.startAtPublicChat -> { @@ -486,7 +457,15 @@ fun App( "NotificationLaunch", "navigating to public chat launchId=${target.launchId}" ) - navController.navigateToPublicChat() + if (isDesktopListDetail) { + pendingMainTab = MAIN_PAGE_CHATS + if (navController.currentBackStackEntry?.destination?.route != "chat") { + navController.popBackStack("chat", inclusive = false) + } + chatsDetailNavController.navigateToPublicChat() + } else { + navController.navigateToPublicChat() + } } } } @@ -494,62 +473,55 @@ fun App( CompositionLocalProvider( LocalNavController provides navController, + LocalDesktopChatsNavController provides + if (isDesktopListDetail) chatsDetailNavController else null, + LocalDesktopSettingsNavController provides + if (isDesktopListDetail) settingsDetailNavController else null, LocalSystemBarsVisibility provides rememberSystemBarsController() ) { if (startDestination != null) { val currentEntry by navController.currentBackStackEntryAsState() val currentRoute = currentEntry?.destination?.route - val previousRoute = - navController.previousBackStackEntry?.destination?.route - val profileUserId = standaloneProfileUserId(currentEntry) - val widthSizeClass = currentWindowAdaptiveInfo().widthSizeClass - var pendingMainTab by remember { mutableIntStateOf(MAIN_PAGE_CHATS) } + val settingsEntry by settingsDetailNavController.currentBackStackEntryAsState() + val settingsRoute = settingsEntry?.destination?.route + val settingsProfileUserId = standaloneProfileUserId(settingsEntry) val ownUserId = ApiClient.user?.id val showConversationListDetail = - widthSizeClass != WindowWidthSizeClass.COMPACT && - isConversationShellRoute( - currentRoute, - previousRoute, - ownUserId, - profileUserId, + isDesktopListDetail && currentRoute == "chat" + val forceSettingsListTab = + showConversationListDetail && ( + isEditProfileRoute(settingsRoute) || + ( + isStandaloneProfileRoute(settingsRoute) && + settingsProfileUserId != null && + settingsProfileUserId == ownUserId + ) ) + LaunchedEffect(Unit) { + DesktopMenuCommands.commands.collect { command -> + if (command != DesktopMenuCommand.OpenAbout) return@collect + pendingMainTab = MAIN_PAGE_SETTINGS + if (isDesktopListDetail) { + settingsDetailNavController.navigateReplacingMainDetail( + route = SettingsRoutes.About, + ) + } else { + navController.navigateReplacingMainDetail( + route = SettingsRoutes.About, + ) + } + } + } + ScreenSurface { Box(Modifier.fillMaxSize()) { - // Own profile (Profile tab / settings hub) always uses the settings - // detail host — even when a chat remains under the back stack via - // preserveConversationDetail. Other users' profiles opened from a - // conversation stay in the chats detail (see chatsDetailKey). - val settingsProfileSplit = - showConversationListDetail && - isStandaloneProfileRoute(currentRoute) && - profileUserId != null && - profileUserId == ownUserId val listPaneWidth = if (widthSizeClass == WindowWidthSizeClass.EXPANDED) { 448.dp } else { 360.dp } - // Own profile lives in the settings detail host: keep the Settings - // list tab active (Profile is only a shortcut button in two-pane). - // forceSettingsTab only scrolls when true — clearing it does not - // snap back, so switching to Chats while profile stays on the stack - // is fine. - val forceSettingsListTab = settingsProfileSplit - - var retainedChatsRoute by remember { mutableStateOf(null) } - LaunchedEffect(currentRoute, pendingMainTab) { - when { - isConversationChatRoute(currentRoute) -> { - retainedChatsRoute = currentRoute - } - currentRoute == "chat" && - pendingMainTab == MAIN_PAGE_CHATS -> { - retainedChatsRoute = null - } - } - } @Composable fun AppNavHost(modifier: Modifier = Modifier) { @@ -562,345 +534,140 @@ fun App( popEnterTransition = { rootNavPopEnterTransition() }, popExitTransition = { rootNavPopExitTransition() }, ) { - composable("serverConfig") { - ServerConfigScreen() - } + composable("welcome") { + WelcomeScreen( + onGetStarted = { + navController.navigate("auth") { + popUpTo("auth") { inclusive = true } + launchSingleTop = true + } + }, + onAlreadyLoggedIn = { + WebSocketManager.connect(forceRestart = true) + navController.navigateAndWipeBackStack("chat") + }, + ) + } - composable("welcome") { - WelcomeScreen( - onGetStarted = { - navController.navigate("auth") { - popUpTo("auth") { inclusive = true } - launchSingleTop = true - } - }, - onAlreadyLoggedIn = { - WebSocketManager.connect(forceRestart = true) - navController.navigateAndWipeBackStack("chat") - }, - ) - } + composable("auth") { + AuthScreen( + onAuthSuccess = { + MainScope().launch { + runCatching { + bootstrapSessionInstance( + hasToken = true, + forceNetwork = false, + ) + } + PublicChatProfileSync.ensureStarted() + ProfileUpdateSync.ensureStarted() + StatusSubscriptionCoordinator.ensureStarted() + scheduleSessionInstanceNetworkRefresh() + } + WebSocketManager.connect(forceRestart = true) + navController.navigateAndWipeBackStack("chat") + }, + onBackToWelcome = { navController.navigateUp() }, + ) + } - composable("auth") { - AuthScreen( - onAuthSuccess = { - MainScope().launch { - runCatching { - bootstrapSessionInstance( - hasToken = true, - forceNetwork = false, - ) - } - PublicChatProfileSync.ensureStarted() - ProfileUpdateSync.ensureStarted() - StatusSubscriptionCoordinator.ensureStarted() - scheduleSessionInstanceNetworkRefresh() - } - WebSocketManager.connect(forceRestart = true) - navController.navigateAndWipeBackStack("chat") - }, - onBackToWelcome = { navController.navigateUp() }, - ) - } + composable(YandexOAuthNav.ROUTE) { + YandexOAuthScreen() + } - composable(YandexOAuthNav.ROUTE) { - YandexOAuthScreen() - } + composable(SmartCaptchaNav.ROUTE) { + SmartCaptchaScreen() + } - composable(SmartCaptchaNav.ROUTE) { - SmartCaptchaScreen() - } - - composable("chat") { - if (showConversationListDetail) { - EmptyConversationPlaceholder() - } else { - MainScreen( - sharedTransitionScope = this@SharedTransitionLayout, - animatedVisibilityScope = this, - snackbarHostState = profileLookupSnackbarHostState, - initialPage = pendingMainTab, - ) - } - } - - composable(PublicChatNav.CHAT_ROUTE) { - PublicChatChatRoute( - scrollToMessageId = scrollToMessageId, - navController = navController, - sharedTransitionScope = this@SharedTransitionLayout, - animatedVisibilityScope = this, - ) - } - - composable(PublicChatNav.PROFILE_ROUTE) { - PublicChatProfileRoute( - navController = navController, - sharedTransitionScope = this@SharedTransitionLayout, - animatedVisibilityScope = this, - ) - } - - composable( - route = "search/conversations", - enterTransition = { searchScreenEnterTransition() }, - exitTransition = { searchScreenExitTransition() }, - popEnterTransition = { searchScreenEnterTransition() }, - popExitTransition = { searchScreenExitTransition() }, - ) { - ChatsSearchScreen( - onBack = { navController.popBackStack() }, - sharedTransitionScope = this@SharedTransitionLayout, - animatedVisibilityScope = this, - onOpenProfile = { userId: Int -> - if (userId != 0) { - navController.navigateReplacingMainDetail("profile/$userId") - } - }, - onOpenConversation = { userId: Int -> - if (userId != 0) { - navController.navigateToDmChat(userId) + composable("chat") { + // List–detail keeps the root on `chat` under the shell; + // empty placeholders live in Desktop*DetailNavHost only. + // Drawing EmptyConversationPlaceholder here ghosts a + // second copy through the transparent chats detail pane. + if (!showConversationListDetail) { + MainScreen( + sharedTransitionScope = this@SharedTransitionLayout, + animatedVisibilityScope = this, + snackbarHostState = profileLookupSnackbarHostState, + initialPage = pendingMainTab, + ) } } - ) - } - composable( - route = "profile/{userId}?fromDeepLink={fromDeepLink}", - arguments = listOf( - navArgument("userId") { type = NavType.StringType }, - navArgument("fromDeepLink") { - type = NavType.BoolType - defaultValue = false - }, - ) - ) { backStackEntry -> - val args = backStackEntry.savedStateHandle - val userIdParam = args.get("userId") - val parsedUserId = userIdParam?.toIntOrNull() - val userId = if ((parsedUserId ?: 0) > 0) parsedUserId else null - val profileUsername = if (userId == null) { - userIdParam?.trim()?.takeIf { it.isNotBlank() } - } else null + composable( + route = "search/conversations", + enterTransition = { searchScreenEnterTransition() }, + exitTransition = { searchScreenExitTransition() }, + popEnterTransition = { searchScreenEnterTransition() }, + popExitTransition = { searchScreenExitTransition() }, + ) { + ChatsSearchScreen( + onBack = { navController.popBackStack() }, + sharedTransitionScope = this@SharedTransitionLayout, + animatedVisibilityScope = this, + onOpenProfile = { userId: Int -> + if (userId == 0) return@ChatsSearchScreen + if (isDesktopListDetail) { + navController.popBackStack("chat", inclusive = false) + pendingMainTab = MAIN_PAGE_CHATS + chatsDetailNavController.navigateReplacingMainDetail( + "profile/$userId", + ) + } else { + navController.navigateReplacingMainDetail( + "profile/$userId", + ) + } + }, + onOpenConversation = { userId: Int -> + if (userId == 0) return@ChatsSearchScreen + if (isDesktopListDetail) { + navController.popBackStack("chat", inclusive = false) + pendingMainTab = MAIN_PAGE_CHATS + chatsDetailNavController.navigateToDmChat(userId) + } else { + navController.navigateToDmChat(userId) + } + } + ) + } - val fromDeepLink = when (val rawFromDeepLink = args.get("fromDeepLink")) { - is Boolean -> rawFromDeepLink - is String -> rawFromDeepLink == "true" - else -> false + // Root graph keeps all detail routes for compact + welcome. + // Desktop list–detail navigates per-tab NavHosts instead and + // leaves the root on `chat` while the shell is visible. + conversationDetailDestinations( + navController = navController, + sharedTransitionScope = this@SharedTransitionLayout, + scrollToMessageId = scrollToMessageId, + ) + profileDetailDestinations( + navController = navController, + sharedTransitionScope = this@SharedTransitionLayout, + ) + settingsDetailDestinations( + navController = navController, + rootNavController = navController, + ) } - Logger.d( - "ProfileRoute", - "profile entry args: rawUserId=$userIdParam parsedUserId=$parsedUserId resolvedUserId=$userId " + - "resolvedUsername=$profileUsername fromDeepLink=$fromDeepLink " + - "currentRoute=${backStackEntry.destination.route}" - ) - - ProfileScreen( - userId = userId, - username = profileUsername, - showBackButton = !settingsProfileSplit, - onBack = { navController.navigateUp() }, - onChat = { navController.navigateToDmChat(it) }, - sharedTransitionScope = this@SharedTransitionLayout, - animatedVisibilityScope = this@composable, - showErrorAsToast = fromDeepLink - ) - } - - composable( - route = ProfileRoutes.Edit, - arguments = listOf( - navArgument(ProfileRoutes.ARG_FOCUS) { - type = NavType.StringType - defaultValue = "" - }, - ), - ) { entry -> - val focusField = EditProfileFocusField.fromArg( - entry.savedStateHandle.get(ProfileRoutes.ARG_FOCUS), - ) - EditProfileScreen( - onBack = { navController.navigateUp() }, - initialFocusField = focusField, - ) - } - - composable( - route = DmNav.CHAT_ROUTE, - arguments = listOf( - navArgument("otherUserId") { type = NavType.StringType }, - navArgument("sourceMessageId") { type = NavType.IntType; defaultValue = -1 }, - ), - ) { entry -> - val otherUserId = entry.savedStateHandle.get("otherUserId")?.toIntOrNull() ?: 0 - val sourceMessageId = entry.savedStateHandle.get("sourceMessageId") ?: -1 - if (otherUserId <= 0) return@composable - DmChatRoute( - otherUserId = otherUserId, - scrollToMessageId = if (sourceMessageId > 0) sourceMessageId else null, - navController = navController, - sharedTransitionScope = this@SharedTransitionLayout, - animatedVisibilityScope = this, - ) - } - - composable( - route = DmNav.PROFILE_ROUTE, - arguments = listOf(navArgument("otherUserId") { type = NavType.StringType }), - ) { entry -> - val otherUserId = entry.savedStateHandle.get("otherUserId")?.toIntOrNull() ?: 0 - if (otherUserId <= 0) return@composable - DmProfileRoute( - otherUserId = otherUserId, - navController = navController, - sharedTransitionScope = this@SharedTransitionLayout, - animatedVisibilityScope = this, - ) - } - - settingsComposable("about") { - AboutScreen() - } - - settingsComposable(SettingsRoutes.Logs) { - LogsScreen() - } - - settingsComposable(SettingsRoutes.LogFiles) { - LogFilesScreen( - onOpenFile = { file -> - navController.previousBackStackEntry - ?.savedStateHandle - ?.set(LOG_FILE_OPEN_RESULT_KEY, file.path) - navController.navigateUp() - }, - ) - } - - settingsComposable( - route = DocumentType.ROUTE, - arguments = listOf( - navArgument(DocumentType.ARG_DOCUMENT_TYPE) { type = NavType.StringType }, - ), - ) { entry -> - val type = entry.savedStateHandle - .get(DocumentType.ARG_DOCUMENT_TYPE) - ?.let(DocumentType::typeFromArg) - ?: return@settingsComposable - DocumentScreen( - type = type, - onBack = { navController.navigateUp() }, - onOpenLegalDocument = { linkedType -> - navController.navigate(DocumentType.route(linkedType)) { - launchSingleTop = true + DisposableEffect(navController) { + ApiClient.onAuthError = { + Logger.i("App", "Global auth error handler triggered, navigating to login") + runCatching { + navController.navigateAndWipeBackStack("welcome") + }.onFailure { e -> + Logger.w("App", "Auth navigation failed: ${e.message}", e) } - }, - ) - } - - settingsComposable(SettingsRoutes.Appearance) { - AppearanceScreen(onBack = { navController.navigateUp() }) - } - - settingsComposable(SettingsRoutes.Notifications) { - NotificationsScreen(onBack = { navController.navigateUp() }) - } - - settingsComposable(SettingsRoutes.Devices) { - DevicesScreen(onBack = { navController.navigateUp() }) - } - - settingsComposable(SettingsRoutes.SecurityPasswordFlow) { - ChangePasswordScreen( - onBack = { navController.navigateUp() }, - onDone = { navController.popBackStack() }, - ) - } - - settingsComposable(SettingsRoutes.AccountDeleteFlow) { - DeleteAccountScreen( - onBack = { navController.navigateUp() }, - onDeleted = { - navController.navigate("welcome") { - popUpTo("chat") { inclusive = true } - } - }, - ) - } - - settingsComposable(SettingsRoutes.AccountYandexFlow) { - ChangeYandexConfirmScreen( - onBack = { navController.navigateUp() }, - ) - } - - settingsComposable(SettingsRoutes.AccountYandexOAuth) { - ChangeYandexOAuthScreen( - onBack = { navController.navigateUp() }, - ) - } - - settingsComposable(SettingsRoutes.AccountYandexDone) { - ChangeYandexDoneScreen( - onDone = { - navController.popBackStack(SettingsRoutes.Account, inclusive = false) - }, - ) - } - - settingsComposable(SettingsRoutes.Account) { - AccountScreen( - onBack = { navController.navigateUp() }, - onLogout = { - navController.navigate("welcome") { - popUpTo("chat") { inclusive = true } - } - }, - onChangePassword = { navController.navigate(SettingsRoutes.SecurityPasswordFlow) }, - onChangeYandexId = { navController.navigate(SettingsRoutes.AccountYandexFlow) }, - onDeleteAccount = { navController.navigate(SettingsRoutes.AccountDeleteFlow) }, - ) - } - } - - DisposableEffect(navController) { - ApiClient.onAuthError = { - Logger.i("App", "Global auth error handler triggered, navigating to login") - runCatching { - navController.navigateAndWipeBackStack("welcome") - }.onFailure { e -> - Logger.w("App", "Auth navigation failed: ${e.message}", e) + } + onDispose { + ApiClient.onAuthError = null + } } } - onDispose { - ApiClient.onAuthError = null - } - } - } + + AppNavHost(Modifier.fillMaxSize()) if (showConversationListDetail) { - val detailPaneAnim = tween( - durationMillis = 280, - easing = FastOutSlowInEasing, - ) - val chatsDetailKey = when { - isConversationChatRoute(currentRoute) || - isConversationProfileRoute(currentRoute) || - ( - isStandaloneProfileRoute(currentRoute) && - !settingsProfileSplit && - isConversationChatRoute(previousRoute) - ) -> "nav" - retainedChatsRoute != null -> "retained:$retainedChatsRoute" - else -> "empty" - } - val settingsDetailKey = when { - settingsProfileSplit || isSettingsDetailRoute(currentRoute) -> "nav" - else -> "empty" - } - // Chats / contacts stay edge-to-edge; settings host wraps its - // own AppPanel so shell structure stays stable across tabs. val detailEdgeToEdge = pendingMainTab == MAIN_PAGE_CHATS || pendingMainTab == MAIN_PAGE_CONTACTS @@ -927,117 +694,38 @@ fun App( DesktopTabDetailHosts( selectedTab = pendingMainTab, chatsDetail = { - // SizeTransform uses Lookahead under SharedTransitionLayout; - // nesting that with always-composed tab hosts crashes with - // "Parents state is LookaheadMeasuring". Disable size morph. - AnimatedContent( - targetState = chatsDetailKey, - transitionSpec = { - val navHostSwap = - ( - initialState == "nav" && - targetState.startsWith("retained:") - ) || - ( - initialState.startsWith("retained:") && - targetState == "nav" - ) - val transform = if (navHostSwap) { - EnterTransition.None togetherWith - ExitTransition.None - } else { - ( - fadeIn(animationSpec = detailPaneAnim) + - scaleIn( - initialScale = 0.98f, - animationSpec = detailPaneAnim, - ) - ) togetherWith fadeOut( - animationSpec = tween( - durationMillis = 180, - easing = FastOutSlowInEasing, - ), - ) - } - transform.using(null) - }, - label = "chatsDetailPane", - modifier = Modifier.fillMaxSize(), - ) { state -> - when { - state == "nav" -> { - AppNavHost(Modifier.fillMaxSize()) - } - state.startsWith("retained:") -> { - val route = - state.removePrefix("retained:") - val dmUserId = dmUserIdFromRoute(route) - when { - dmUserId != null -> DmChatRoute( - otherUserId = dmUserId, - scrollToMessageId = null, - navController = navController, - sharedTransitionScope = null, - animatedVisibilityScope = null, - ) - route == PublicChatNav.CHAT_ROUTE -> { - PublicChatChatRoute( - scrollToMessageId = - scrollToMessageId, - navController = navController, - sharedTransitionScope = null, - animatedVisibilityScope = null, - ) - } - } - } - else -> EmptyConversationPlaceholder() - } - } + DesktopChatsDetailNavHost( + navController = chatsDetailNavController, + sharedTransitionScope = + this@SharedTransitionLayout, + scrollToMessageId = scrollToMessageId, + ) }, settingsDetail = { - AnimatedContent( - targetState = settingsDetailKey, - transitionSpec = { - ( - ( - fadeIn(animationSpec = detailPaneAnim) + - scaleIn( - initialScale = 0.98f, - animationSpec = detailPaneAnim, - ) - ) togetherWith fadeOut( - animationSpec = tween( - durationMillis = 180, - easing = FastOutSlowInEasing, - ), + DesktopSettingsDetailNavHost( + navController = settingsDetailNavController, + rootNavController = navController, + sharedTransitionScope = + this@SharedTransitionLayout, + onOpenChatFromProfile = { userId -> + if (userId > 0) { + pendingMainTab = MAIN_PAGE_CHATS + chatsDetailNavController.navigateToDmChat( + userId, ) - ).using(null) - }, - label = "settingsDetailPane", - modifier = Modifier.fillMaxSize(), - ) { state -> - if (state == "nav") { - AppPanel( - Modifier.fillMaxSize(), - shape = RoundedCornerShape(24.dp), - ) { - AppNavHost(Modifier.fillMaxSize()) } - } else { - EmptySettingsPlaceholder() - } - } + }, + ) }, contactsDetail = { - EmptyContactsPlaceholder() + DesktopContactsDetailNavHost( + navController = contactsDetailNavController, + ) }, ) }, ) } - } else { - AppNavHost(Modifier.fillMaxSize()) } CallOverlay(Modifier.fillMaxSize()) diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/chat/panels/dm/DmNav.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/chat/panels/dm/DmNav.kt index a898bd3..90bcf23 100644 --- a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/chat/panels/dm/DmNav.kt +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/chat/panels/dm/DmNav.kt @@ -44,7 +44,7 @@ fun NavController.navigateToDmChat( builder: NavOptionsBuilder.() -> Unit = {}, ) { navigate(DmNav.chatRoute(otherUserId, sourceMessageId)) { - popUpTo("chat") { saveState = true } + popUpTo(graph.startDestinationId) { saveState = true } launchSingleTop = true builder() } diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/chat/panels/publicchat/PublicChatNav.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/chat/panels/publicchat/PublicChatNav.kt index 7b68b64..9af504e 100644 --- a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/chat/panels/publicchat/PublicChatNav.kt +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/chat/panels/publicchat/PublicChatNav.kt @@ -31,7 +31,7 @@ fun NavController.navigateToPublicChat( builder: NavOptionsBuilder.() -> Unit = {}, ) { navigate(PublicChatNav.CHAT_ROUTE) { - popUpTo("chat") { saveState = true } + popUpTo(graph.startDestinationId) { saveState = true } launchSingleTop = true builder() } diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/DesktopDetailNavHosts.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/DesktopDetailNavHosts.kt new file mode 100644 index 0000000..30d290e --- /dev/null +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/DesktopDetailNavHosts.kt @@ -0,0 +1,156 @@ +package ru.fromchat.ui.main + +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.SharedTransitionScope +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.currentBackStackEntryAsState +import ru.fromchat.ui.LocalNavController +import ru.fromchat.ui.components.AppPanel + +private val detailNavTween = tween(durationMillis = 250, easing = FastOutSlowInEasing) + +private fun detailNavEnter(): EnterTransition = + scaleIn(initialScale = 0.9f, animationSpec = detailNavTween) + + fadeIn(animationSpec = detailNavTween) + +private fun detailNavExit(): ExitTransition = + scaleOut(targetScale = 1.1f, animationSpec = detailNavTween) + + fadeOut(animationSpec = detailNavTween) + +private fun detailNavPopEnter(): EnterTransition = + scaleIn(initialScale = 1.1f, animationSpec = detailNavTween) + + fadeIn(animationSpec = detailNavTween) + +private fun detailNavPopExit(): ExitTransition = + scaleOut(targetScale = 0.9f, animationSpec = detailNavTween) + + fadeOut(animationSpec = detailNavTween) + +/** + * Independent Chats-tab detail [NavHost] for desktop list–detail. + */ +@Composable +fun DesktopChatsDetailNavHost( + navController: NavHostController, + sharedTransitionScope: SharedTransitionScope, + scrollToMessageId: Int?, + modifier: Modifier = Modifier, +) { + CompositionLocalProvider(LocalNavController provides navController) { + NavHost( + navController = navController, + startDestination = DesktopDetailNav.CHATS_ROOT, + modifier = modifier.fillMaxSize(), + enterTransition = { detailNavEnter() }, + exitTransition = { detailNavExit() }, + popEnterTransition = { detailNavPopEnter() }, + popExitTransition = { detailNavPopExit() }, + ) { + composable(DesktopDetailNav.CHATS_ROOT) { + EmptyConversationPlaceholder() + } + conversationDetailDestinations( + navController = navController, + sharedTransitionScope = sharedTransitionScope, + scrollToMessageId = scrollToMessageId, + ) + profileDetailDestinations( + navController = navController, + sharedTransitionScope = sharedTransitionScope, + showBackOnProfile = true, + ) + } + } +} + +/** + * Independent Settings-tab detail [NavHost] for desktop list–detail + * (settings screens, own profile, and edit profile on the same stack). + * + * [AppPanel] is drawn only behind non-empty destinations so the empty root stays + * bare (no surface fill), matching the prior AnimatedContent empty vs panel split. + * Panel is a sibling under the [NavHost] so the host is not remounted empty ↔ content. + */ +@Composable +fun DesktopSettingsDetailNavHost( + navController: NavHostController, + rootNavController: NavHostController, + sharedTransitionScope: SharedTransitionScope, + onOpenChatFromProfile: (Int) -> Unit, + modifier: Modifier = Modifier, +) { + val detailRoute = + navController.currentBackStackEntryAsState().value?.destination?.route + val showPanel = + detailRoute != null && detailRoute != DesktopDetailNav.SETTINGS_ROOT + + Box(modifier.fillMaxSize()) { + if (showPanel) { + AppPanel( + Modifier.fillMaxSize(), + shape = RoundedCornerShape(24.dp), + ) {} + } + CompositionLocalProvider(LocalNavController provides navController) { + NavHost( + navController = navController, + startDestination = DesktopDetailNav.SETTINGS_ROOT, + modifier = Modifier.fillMaxSize(), + enterTransition = { detailNavEnter() }, + exitTransition = { detailNavExit() }, + popEnterTransition = { detailNavPopEnter() }, + popExitTransition = { detailNavPopExit() }, + ) { + composable(DesktopDetailNav.SETTINGS_ROOT) { + EmptySettingsPlaceholder() + } + settingsDetailDestinations( + navController = navController, + rootNavController = rootNavController, + ) + profileDetailDestinations( + navController = navController, + sharedTransitionScope = sharedTransitionScope, + showBackOnProfile = false, + onOpenChat = onOpenChatFromProfile, + ) + } + } + } +} + +/** + * Independent Contacts-tab detail [NavHost] (placeholder root only for now). + */ +@Composable +fun DesktopContactsDetailNavHost( + navController: NavHostController, + modifier: Modifier = Modifier, +) { + CompositionLocalProvider(LocalNavController provides navController) { + NavHost( + navController = navController, + startDestination = DesktopDetailNav.CONTACTS_ROOT, + modifier = modifier.fillMaxSize(), + ) { + composable(DesktopDetailNav.CONTACTS_ROOT) { + EmptyContactsPlaceholder() + } + } + } +} diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/DesktopTabDetailHosts.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/DesktopTabDetailHosts.kt index 6c354bb..6f151e6 100644 --- a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/DesktopTabDetailHosts.kt +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/DesktopTabDetailHosts.kt @@ -7,6 +7,29 @@ import androidx.compose.runtime.compositionLocalOf import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.zIndex +import androidx.navigation.NavController + +/** + * Empty roots for desktop per-tab detail [androidx.navigation.NavHost]s. + * Independent back stacks so Chats / Settings / Contacts do not share one detail stack. + */ +object DesktopDetailNav { + const val CHATS_ROOT = "desktop_chats_detail_root" + const val SETTINGS_ROOT = "desktop_settings_detail_root" + const val CONTACTS_ROOT = "desktop_contacts_detail_root" +} + +/** + * Chats-tab detail [NavController] on large-screen list–detail, or null on compact. + * Prefer this (with fallback to [ru.fromchat.ui.LocalNavController]) when opening conversations. + */ +val LocalDesktopChatsNavController = compositionLocalOf { null } + +/** + * Settings-tab detail [NavController] on large-screen list–detail, or null on compact. + * Prefer this when opening settings / own profile / edit profile in the detail pane. + */ +val LocalDesktopSettingsNavController = compositionLocalOf { null } /** * Which main bottom-nav tab owns the list–detail detail pane on large screens. @@ -17,10 +40,10 @@ val LocalDesktopMainTab = compositionLocalOf { MAIN_PAGE_CHATS } /** * Per-tab detail pane hosts for desktop list–detail. * - * Each tab supplies its own detail content. Only the [selectedTab] host is visible - * (alpha 1 + highest z-index); the others stay composed at alpha 0 underneath so opening - * Settings does not dispose an open Chats detail, and returning to Chats shows it again - * without clearing the chat route. + * Each tab supplies its own detail content (typically its own [androidx.navigation.compose.NavHost]). + * Only the [selectedTab] host is visible (alpha 1 + highest z-index); the others stay composed at + * alpha 0 underneath so opening Settings does not dispose an open Chats detail, and returning to + * Chats shows it again without clearing the chat route. */ @Composable fun DesktopTabDetailHosts( diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainDetailDestinations.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainDetailDestinations.kt new file mode 100644 index 0000000..8de9498 --- /dev/null +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainDetailDestinations.kt @@ -0,0 +1,292 @@ +package ru.fromchat.ui.main + +import androidx.compose.animation.SharedTransitionScope +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavType +import androidx.navigation.compose.composable +import androidx.navigation.navArgument +import ru.fromchat.Logger +import ru.fromchat.legal.DocumentScreen +import ru.fromchat.legal.DocumentType +import ru.fromchat.ui.chat.panels.dm.DmChatRoute +import ru.fromchat.ui.chat.panels.dm.DmNav +import ru.fromchat.ui.chat.panels.dm.DmProfileRoute +import ru.fromchat.ui.chat.panels.dm.navigateToDmChat +import ru.fromchat.ui.chat.panels.publicchat.PublicChatChatRoute +import ru.fromchat.ui.chat.panels.publicchat.PublicChatNav +import ru.fromchat.ui.chat.panels.publicchat.PublicChatProfileRoute +import ru.fromchat.ui.main.settings.AboutScreen +import ru.fromchat.ui.main.settings.AppearanceScreen +import ru.fromchat.ui.main.settings.DevicesScreen +import ru.fromchat.ui.main.settings.LOG_FILE_OPEN_RESULT_KEY +import ru.fromchat.ui.main.settings.LogFilesScreen +import ru.fromchat.ui.main.settings.LogsScreen +import ru.fromchat.ui.main.settings.NotificationsScreen +import ru.fromchat.ui.main.settings.SettingsRoutes +import ru.fromchat.ui.main.settings.account.AccountScreen +import ru.fromchat.ui.main.settings.account.changepassword.ChangePasswordScreen +import ru.fromchat.ui.main.settings.account.changeyandex.ChangeYandexConfirmScreen +import ru.fromchat.ui.main.settings.account.changeyandex.ChangeYandexDoneScreen +import ru.fromchat.ui.main.settings.account.changeyandex.ChangeYandexOAuthScreen +import ru.fromchat.ui.main.settings.account.delete.DeleteAccountScreen +import ru.fromchat.ui.main.settings.server.ServerConfigScreen +import ru.fromchat.ui.profile.EditProfileFocusField +import ru.fromchat.ui.profile.EditProfileScreen +import ru.fromchat.ui.profile.ProfileRoutes +import ru.fromchat.ui.profile.ProfileScreen + +/** + * Conversation detail destinations (DM / public chat + in-conversation profiles). + * Used by the root NavHost (compact) and the desktop Chats detail NavHost. + */ +fun NavGraphBuilder.conversationDetailDestinations( + navController: NavController, + sharedTransitionScope: SharedTransitionScope, + scrollToMessageId: Int?, +) { + composable(PublicChatNav.CHAT_ROUTE) { + PublicChatChatRoute( + scrollToMessageId = scrollToMessageId, + navController = navController, + sharedTransitionScope = sharedTransitionScope, + animatedVisibilityScope = this, + ) + } + + composable(PublicChatNav.PROFILE_ROUTE) { + PublicChatProfileRoute( + navController = navController, + sharedTransitionScope = sharedTransitionScope, + animatedVisibilityScope = this, + ) + } + + composable( + route = DmNav.CHAT_ROUTE, + arguments = listOf( + navArgument("otherUserId") { type = NavType.StringType }, + navArgument("sourceMessageId") { type = NavType.IntType; defaultValue = -1 }, + ), + ) { entry -> + val otherUserId = entry.savedStateHandle.get("otherUserId")?.toIntOrNull() ?: 0 + val sourceMessageId = entry.savedStateHandle.get("sourceMessageId") ?: -1 + if (otherUserId <= 0) return@composable + DmChatRoute( + otherUserId = otherUserId, + scrollToMessageId = if (sourceMessageId > 0) sourceMessageId else null, + navController = navController, + sharedTransitionScope = sharedTransitionScope, + animatedVisibilityScope = this, + ) + } + + composable( + route = DmNav.PROFILE_ROUTE, + arguments = listOf(navArgument("otherUserId") { type = NavType.StringType }), + ) { entry -> + val otherUserId = entry.savedStateHandle.get("otherUserId")?.toIntOrNull() ?: 0 + if (otherUserId <= 0) return@composable + DmProfileRoute( + otherUserId = otherUserId, + navController = navController, + sharedTransitionScope = sharedTransitionScope, + animatedVisibilityScope = this, + ) + } +} + +/** + * Standalone profile + edit-profile destinations. + * + * @param showBackOnProfile When false (desktop settings detail own-profile), hides the back button. + * @param onOpenChat Opens a DM; on desktop settings host this should target the Chats detail nav. + */ +fun NavGraphBuilder.profileDetailDestinations( + navController: NavController, + sharedTransitionScope: SharedTransitionScope, + showBackOnProfile: Boolean = true, + onOpenChat: (Int) -> Unit = { navController.navigateToDmChat(it) }, +) { + composable( + route = "profile/{userId}?fromDeepLink={fromDeepLink}", + arguments = listOf( + navArgument("userId") { type = NavType.StringType }, + navArgument("fromDeepLink") { + type = NavType.BoolType + defaultValue = false + }, + ), + ) { backStackEntry -> + val args = backStackEntry.savedStateHandle + val userIdParam = args.get("userId") + val parsedUserId = userIdParam?.toIntOrNull() + val userId = if ((parsedUserId ?: 0) > 0) parsedUserId else null + val profileUsername = if (userId == null) { + userIdParam?.trim()?.takeIf { it.isNotBlank() } + } else { + null + } + + val fromDeepLink = when (val rawFromDeepLink = args.get("fromDeepLink")) { + is Boolean -> rawFromDeepLink + is String -> rawFromDeepLink == "true" + else -> false + } + + Logger.d( + "ProfileRoute", + "profile entry args: rawUserId=$userIdParam parsedUserId=$parsedUserId resolvedUserId=$userId " + + "resolvedUsername=$profileUsername fromDeepLink=$fromDeepLink " + + "currentRoute=${backStackEntry.destination.route}", + ) + + ProfileScreen( + userId = userId, + username = profileUsername, + showBackButton = showBackOnProfile, + onBack = { navController.navigateUp() }, + onChat = onOpenChat, + sharedTransitionScope = sharedTransitionScope, + animatedVisibilityScope = this@composable, + showErrorAsToast = fromDeepLink, + ) + } + + composable( + route = ProfileRoutes.Edit, + arguments = listOf( + navArgument(ProfileRoutes.ARG_FOCUS) { + type = NavType.StringType + defaultValue = "" + }, + ), + ) { entry -> + val focusField = EditProfileFocusField.fromArg( + entry.savedStateHandle.get(ProfileRoutes.ARG_FOCUS), + ) + EditProfileScreen( + onBack = { navController.navigateUp() }, + initialFocusField = focusField, + ) + } +} + +/** + * Settings hub detail destinations (account, appearance, about, …). + * + * @param rootNavController For logout / delete that wipe back to welcome on the root graph. + */ +fun NavGraphBuilder.settingsDetailDestinations( + navController: NavController, + rootNavController: NavController = navController, +) { + composable("about") { + AboutScreen() + } + + composable(SettingsRoutes.Logs) { + LogsScreen() + } + + composable(SettingsRoutes.LogFiles) { + LogFilesScreen( + onOpenFile = { file -> + navController.previousBackStackEntry + ?.savedStateHandle + ?.set(LOG_FILE_OPEN_RESULT_KEY, file.path) + navController.navigateUp() + }, + ) + } + + composable( + route = DocumentType.ROUTE, + arguments = listOf( + navArgument(DocumentType.ARG_DOCUMENT_TYPE) { type = NavType.StringType }, + ), + ) { entry -> + val type = entry.savedStateHandle + .get(DocumentType.ARG_DOCUMENT_TYPE) + ?.let(DocumentType::typeFromArg) + ?: return@composable + DocumentScreen( + type = type, + onBack = { navController.navigateUp() }, + onOpenLegalDocument = { linkedType -> + navController.navigate(DocumentType.route(linkedType)) { + launchSingleTop = true + } + }, + ) + } + + composable(SettingsRoutes.Appearance) { + AppearanceScreen(onBack = { navController.navigateUp() }) + } + + composable(SettingsRoutes.Notifications) { + NotificationsScreen(onBack = { navController.navigateUp() }) + } + + composable(SettingsRoutes.Devices) { + DevicesScreen(onBack = { navController.navigateUp() }) + } + + composable(SettingsRoutes.SecurityPasswordFlow) { + ChangePasswordScreen( + onBack = { navController.navigateUp() }, + onDone = { navController.popBackStack() }, + ) + } + + composable(SettingsRoutes.AccountDeleteFlow) { + DeleteAccountScreen( + onBack = { navController.navigateUp() }, + onDeleted = { + rootNavController.navigate("welcome") { + popUpTo("chat") { inclusive = true } + } + }, + ) + } + + composable(SettingsRoutes.AccountYandexFlow) { + ChangeYandexConfirmScreen( + onBack = { navController.navigateUp() }, + ) + } + + composable(SettingsRoutes.AccountYandexOAuth) { + ChangeYandexOAuthScreen( + onBack = { navController.navigateUp() }, + ) + } + + composable(SettingsRoutes.AccountYandexDone) { + ChangeYandexDoneScreen( + onDone = { + navController.popBackStack(SettingsRoutes.Account, inclusive = false) + }, + ) + } + + composable(SettingsRoutes.Account) { + AccountScreen( + onBack = { navController.navigateUp() }, + onLogout = { + rootNavController.navigate("welcome") { + popUpTo("chat") { inclusive = true } + } + }, + onChangePassword = { navController.navigate(SettingsRoutes.SecurityPasswordFlow) }, + onChangeYandexId = { navController.navigate(SettingsRoutes.AccountYandexFlow) }, + onDeleteAccount = { navController.navigate(SettingsRoutes.AccountDeleteFlow) }, + ) + } + + // Same route string as pre-auth server config on the root graph; fine on a nested graph. + composable(SettingsRoutes.ServerConfig) { + ServerConfigScreen() + } +} diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainDetailNav.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainDetailNav.kt index 2a017b9..4057d29 100644 --- a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainDetailNav.kt +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainDetailNav.kt @@ -2,42 +2,30 @@ package ru.fromchat.ui.main import androidx.navigation.NavController import androidx.navigation.NavOptionsBuilder -import ru.fromchat.ui.chat.panels.publicchat.PublicChatNav /** - * Opens a main-hub detail destination, replacing any prior conversation/settings/profile - * above the main `chat` root so large-screen switches do not stack previous panes. + * Opens a main-hub detail destination, replacing any prior detail above this graph's start + * destination so large-screen switches do not stack previous panes. * Matches [ru.fromchat.ui.chat.panels.dm.navigateToDmChat] / public chat. * - * When [preserveConversationDetail] is true (desktop list–detail), keeps an open chat under - * the new settings/profile destination so tab hosts can retain the Chats detail. - * * No-ops when [route] is already the current main-detail destination (avoids pop+push * churn and AnimatedContent / NavHost transitions for the same screen). + * + * On desktop list–detail, call this on the tab's own detail [NavController] + * ([LocalDesktopSettingsNavController] / [LocalDesktopChatsNavController]) so stacks stay + * independent. [preserveConversationDetail] is ignored — separate NavHosts retain other tabs. */ fun NavController.navigateReplacingMainDetail( route: String, - preserveConversationDetail: Boolean = false, + @Suppress("UNUSED_PARAMETER") preserveConversationDetail: Boolean = false, builder: NavOptionsBuilder.() -> Unit = {}, ) { if (isCurrentMainDetailRoute(route)) return - if (preserveConversationDetail) { - while (true) { - val current = currentBackStackEntry?.destination?.route ?: break - if (current == "chat" || isConversationChatRoute(current)) break - if (!popBackStack()) break - } - navigate(route) { - launchSingleTop = true - builder() - } - } else { - navigate(route) { - popUpTo("chat") { saveState = true } - launchSingleTop = true - builder() - } + navigate(route) { + popUpTo(graph.startDestinationId) { saveState = true } + launchSingleTop = true + builder() } } @@ -56,7 +44,3 @@ fun NavController.isCurrentMainDetailRoute(route: String): Boolean { } return current == route || current.substringBefore("?") == target } - -private fun isConversationChatRoute(route: String?): Boolean = - route == PublicChatNav.CHAT_ROUTE || - (route != null && route.startsWith("dm/") && "/chat" in route) diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainScreen.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainScreen.kt index a5f8228..32062e5 100644 --- a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainScreen.kt +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/MainScreen.kt @@ -95,15 +95,9 @@ private const val PAGE_COUNT = 4 * File-private (not a local fun inside [MainScreen]) so desktop JVM incremental runs do not * chase missing nested classes like `MainScreenKt$MainScreen$openOwnProfileInDetailPane$1`. */ -private fun openOwnProfileInDetailPane( - navController: NavController, - embeddedInListDetail: Boolean, -) { +private fun openOwnProfileInDetailPane(navController: NavController) { val userId = ApiClient.user?.id?.takeIf { it > 0 } ?: return - navController.navigateReplacingMainDetail( - route = "profile/$userId", - preserveConversationDetail = embeddedInListDetail, - ) + navController.navigateReplacingMainDetail(route = "profile/$userId") } /** @@ -120,8 +114,7 @@ private fun selectMainPage( widthClass: WindowWidthSizeClass, scope: CoroutineScope, pagerState: PagerState, - navController: NavController, - embeddedInListDetail: Boolean, + settingsDetailNavController: NavController, ) { when { page == PAGE_PROFILE && widthClass != WindowWidthSizeClass.COMPACT -> { @@ -129,13 +122,13 @@ private fun selectMainPage( val ownUserId = ApiClient.user?.id?.takeIf { it > 0 } val alreadyShowingOwnProfile = ownUserId != null && - navController.isCurrentMainDetailRoute("profile/$ownUserId") + settingsDetailNavController.isCurrentMainDetailRoute("profile/$ownUserId") if (alreadyOnSettingsList && alreadyShowingOwnProfile) return if (!alreadyOnSettingsList) { scope.launch { pagerState.animateScrollToPage(PAGE_SETTINGS) } } if (!alreadyShowingOwnProfile) { - openOwnProfileInDetailPane(navController, embeddedInListDetail) + openOwnProfileInDetailPane(settingsDetailNavController) } } else -> { @@ -168,6 +161,8 @@ fun MainScreen( ) { val effectiveSnackbarHostState = snackbarHostState ?: remember { SnackbarHostState() } val navController = LocalNavController.current + val settingsDetailNavController = + LocalDesktopSettingsNavController.current ?: navController val pagerState = rememberPagerState( initialPage = initialPage.coerceIn(0, PAGE_COUNT - 1), pageCount = { PAGE_COUNT }, @@ -213,6 +208,11 @@ fun MainScreen( } chatListSelectionRequestId += 1 } + DesktopMenuCommand.OpenAbout -> { + if (pagerState.currentPage != PAGE_SETTINGS) { + pagerState.scrollToPage(PAGE_SETTINGS) + } + } } } } @@ -347,8 +347,7 @@ fun MainScreen( widthClass = widthClass, scope = scope, pagerState = pagerState, - navController = navController, - embeddedInListDetail = embeddedInListDetail, + settingsDetailNavController = settingsDetailNavController, ) }, label = { Text(chatsLabel) }, @@ -367,8 +366,7 @@ fun MainScreen( widthClass = widthClass, scope = scope, pagerState = pagerState, - navController = navController, - embeddedInListDetail = embeddedInListDetail, + settingsDetailNavController = settingsDetailNavController, ) }, label = { Text(contactsLabel) }, @@ -384,8 +382,7 @@ fun MainScreen( widthClass = widthClass, scope = scope, pagerState = pagerState, - navController = navController, - embeddedInListDetail = embeddedInListDetail, + settingsDetailNavController = settingsDetailNavController, ) }, label = { Text(settingsLabel) }, @@ -404,8 +401,7 @@ fun MainScreen( widthClass = widthClass, scope = scope, pagerState = pagerState, - navController = navController, - embeddedInListDetail = embeddedInListDetail, + settingsDetailNavController = settingsDetailNavController, ) }, label = { Text(profileLabel) }, diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/chats/ChatsTab.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/chats/ChatsTab.kt index 6c9aa3a..779d451 100644 --- a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/chats/ChatsTab.kt +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/chats/ChatsTab.kt @@ -139,6 +139,7 @@ import ru.fromchat.status_connecting import ru.fromchat.status_updating import ru.fromchat.account_suspended import ru.fromchat.ui.LocalNavController +import ru.fromchat.ui.main.LocalDesktopChatsNavController import ru.fromchat.ui.main.LocalMainChromeInsets import ru.fromchat.ui.chat.panels.dm.navigateToDmChat import ru.fromchat.ui.chat.panels.publicchat.navigateToPublicChat @@ -543,7 +544,8 @@ fun ChatsTab( animatedVisibilityScope: AnimatedVisibilityScope? = null, enterSelectionRequestId: Long = 0L, ) { - val navController = LocalNavController.current + val navController = + LocalDesktopChatsNavController.current ?: LocalNavController.current val clipboard = supportClipboardManagerImpl val haptic = rememberHapticFeedback() val scope = rememberCoroutineScope() diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/settings/SettingsTab.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/settings/SettingsTab.kt index a766b16..7681c4d 100644 --- a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/settings/SettingsTab.kt +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/main/settings/SettingsTab.kt @@ -1,6 +1,5 @@ package ru.fromchat.ui.main.settings -import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.Spacer @@ -22,7 +21,6 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.TopAppBar -import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -34,10 +32,6 @@ import com.pr0gramm3r101.utils.WindowWidthSizeClass import com.pr0gramm3r101.utils.currentWindowAdaptiveInfo import com.pr0gramm3r101.utils.verticalScroll import com.pr0gramm3r101.utils.widthSizeClass -import dev.chrisbanes.haze.blur.blurEffect -import dev.chrisbanes.haze.hazeEffect -import dev.chrisbanes.haze.hazeSource -import dev.chrisbanes.haze.rememberHazeState import org.jetbrains.compose.resources.stringResource import ru.fromchat.Res import ru.fromchat.about @@ -59,9 +53,9 @@ import ru.fromchat.settings_hub_about_sub import ru.fromchat.settings_hub_logs_sub import ru.fromchat.settings_hub_profile_sub import ru.fromchat.ui.LocalNavController -import ru.fromchat.ui.chat.rememberChatSurfaceContainerHazeStyle import ru.fromchat.ui.components.Text import ru.fromchat.ui.extraStatusBars +import ru.fromchat.ui.main.LocalDesktopSettingsNavController import ru.fromchat.ui.main.LocalMainChromeInsets import ru.fromchat.ui.main.mainPagerBottomInset import ru.fromchat.ui.main.navigateReplacingMainDetail @@ -71,17 +65,12 @@ val SettingsStepHorizontalPadding = 24.dp @OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class) @Composable fun SettingsTab() { - val navController = LocalNavController.current + val navController = + LocalDesktopSettingsNavController.current ?: LocalNavController.current val isTwoPane = currentWindowAdaptiveInfo().widthSizeClass != WindowWidthSizeClass.COMPACT - val topChromeHazeState = rememberHazeState() - // Same material as MainScreen bottom nav (not HazeMaterials.thin). - val topChromeHazeStyle = rememberChatSurfaceContainerHazeStyle() fun openDetail(route: String) { - navController.navigateReplacingMainDetail( - route = route, - preserveConversationDetail = isTwoPane, - ) + navController.navigateReplacingMainDetail(route = route) } Scaffold( @@ -99,28 +88,15 @@ fun SettingsTab() { title = { Text(stringResource(Res.string.settings), maxLines = 1, overflow = TextOverflow.Ellipsis) }, - colors = TopAppBarDefaults.topAppBarColors( - containerColor = Color.Transparent, - ), - // Match MainScreen bottom chrome: surfaceContainer + hazeEffect/blurEffect. - modifier = Modifier - .background(MaterialTheme.colorScheme.surfaceContainer) - .hazeEffect(state = topChromeHazeState) { - blurEffect { - style = topChromeHazeStyle - } - }, ) } ) { innerPadding -> Column( Modifier .fillMaxSize() - .hazeSource(topChromeHazeState) .verticalScroll() .mainPagerBottomInset() ) { - // Scrollable top inset so rows can pass under the frosted top chrome. Spacer(Modifier.height(innerPadding.calculateTopPadding())) if (isTwoPane) { diff --git a/app/shared/src/jvmMain/kotlin/ru/fromchat/desktop/DesktopAboutContent.kt b/app/shared/src/jvmMain/kotlin/ru/fromchat/desktop/DesktopAboutContent.kt deleted file mode 100644 index c699a80..0000000 --- a/app/shared/src/jvmMain/kotlin/ru/fromchat/desktop/DesktopAboutContent.kt +++ /dev/null @@ -1,80 +0,0 @@ -package ru.fromchat.desktop - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.navigation.NavType -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import androidx.navigation.compose.rememberNavController -import androidx.navigation.navArgument -import ru.fromchat.legal.DocumentScreen -import ru.fromchat.legal.DocumentType -import ru.fromchat.ui.FromChatTheme -import ru.fromchat.ui.LocalNavController -import ru.fromchat.ui.components.ScreenSurface -import ru.fromchat.ui.main.settings.AboutScreen - -/** - * Hosts [AboutScreen] (and linked legal docs) for a dedicated desktop About window. - * Back from the root About destination closes via [onClose]. - */ -@Composable -fun DesktopAboutContent(onClose: () -> Unit) { - FromChatTheme { - ScreenSurface { - val navController = rememberNavController() - var aboutOpened by remember { mutableStateOf(false) } - - CompositionLocalProvider(LocalNavController provides navController) { - NavHost( - navController = navController, - startDestination = ABOUT_GATE_ROUTE, - ) { - composable(ABOUT_GATE_ROUTE) { - LaunchedEffect(Unit) { - if (!aboutOpened) { - aboutOpened = true - navController.navigate(ABOUT_ROUTE) - } else { - onClose() - } - } - } - - composable(ABOUT_ROUTE) { - AboutScreen() - } - - composable( - route = DocumentType.ROUTE, - arguments = listOf( - navArgument(DocumentType.ARG_DOCUMENT_TYPE) { type = NavType.StringType }, - ), - ) { entry -> - val type = entry.savedStateHandle - .get(DocumentType.ARG_DOCUMENT_TYPE) - ?.let(DocumentType::typeFromArg) - ?: return@composable - DocumentScreen( - type = type, - onBack = { navController.navigateUp() }, - onOpenLegalDocument = { linkedType -> - navController.navigate(DocumentType.route(linkedType)) { - launchSingleTop = true - } - }, - ) - } - } - } - } - } -} - -private const val ABOUT_GATE_ROUTE = "_about_gate" -private const val ABOUT_ROUTE = "about"