From 6bb91b26a020ed4f7c2df931a064c4e6feee3166 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Thu, 11 Apr 2024 16:51:55 +0330 Subject: [PATCH 01/65] update diagram --- README.md | 2 +- asset/arch.jpg | Bin 88040 -> 0 bytes asset/architecture.jpg | Bin 0 -> 83337 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 asset/arch.jpg create mode 100644 asset/architecture.jpg diff --git a/README.md b/README.md index 6b148d01..de6a9d4f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Check the apk [from here](asset/app_v1.0.0.apk) ## ⚙️ Architecture -![Architecture diagram](asset/arch.jpg) +![Architecture diagram](asset/architecture.jpg) The main architecture of code based on MVI + CLEAN architecture. The division criteria is a hybrid strategy based on Feature + Layer by module. For the detail of architecture, please read [this article](https://medium.com/@kaaveh/migrate-from-mvvm-to-mvi-f938c27c214f). diff --git a/asset/arch.jpg b/asset/arch.jpg deleted file mode 100644 index 01ddfa8b97763a21ce229ca1f0a9d6c0daa4a23c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88040 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%0DhGLTLLI%848-S!{u~n;_ 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

h6U6sp(Ls z6j*OME(x*>{-zIK!fEbD&>pzsxbz{b!ZVoj5X=(zw`N$8!v$@m`Sk0d}=tWc71{sPjTm#{g3KPQEjsxIv9oYo4|6c}3BtL6SPjb1?HfQ|Q)7m$eKlKo;w~r|(qiJ_u z?=lVD;xDQ(oxM$jJ4!m3A@`uVy&F)z_GMu5i)h8(n;yNAe!o*u87tu{ryA~OH&cGj zwJLh}@XF}JsX87}7qe>LioAxbGO1g)Zb@nN%fl4F&wt*G|It3f{vyNKPiUGIoa%fp zrH7DetP#q-*f!f5<+HYPU5T9)Rr7`9gs5ZdHtT8HJ=*py<3_?@ z`B2g=f;lj-c5jhyD_@#B^%DzQ96gSkYMg#PYR6a5`yP-|Z?2jU-|x*ob@t98PjF7VrJAiw(JM%*JvEx~g*Jw2C z^9WF4{RUxU4(xZSY5YFY-2mmxkjn)NyD7=imGV4y!um^(1pEocVV8Lh{Ml^TgSlCE zM6Wnq@USTjeb*P|^-5L6{h~5+X|KxRI_UV~AX>c~WisT6+#*^yr#-JT|Ix`(I=Ef& zRl7uF+vJB`uks7G8EJun2_f}DbG>KQoUGF52DU09WWhBK*5r3CqUSCUrF%{Sp4EML zDC7)*5vNmzC2Qe7H?|R)Z6l3}k`(w3y1#5vmJgjXGkp!zE%gGn9X!f>4!+X}!YS7T zcS341JyJyT^NGgTQy$NgptaiJ!m#H19>}@T6Uf%3-F=PS)_QN*s+_<=t3{a4_yr3; zw$9G(R-YiHKZ;s{oYKx>B4#0>CsxC_vv7lr%4+7Mk*9C+yp;U5n3AuJEN3Zvm}H6EXe3cM3S zFoC1j4Eyf%Yt1=3Tp^aQCY^U`2MQ*VhaKBCrz6^%c~W)xDR2tG*tx3EbpNOGT<5YR zdd`L|E|cAl4(6-rJ=K_2SzFmq6}jE>FzxJHL1kuA1?|4V^JiqU{5b!DE%=ji{>e`K zXZsuRU(DSEWz{dt(*t;mUKgW>`@MjJ!Xq;NrEE^IyN_$3m4n_~&-~8(FOb6?gdpEi=cR-c|&e^C`MN5|cQ3tlj|fp1@~g zjdA+o1Dh^8f#a0Oz3F}X;^H#4@HZtl=fCvm^el-Vm4q}y%ha1GZfZd;;qJs7%|k*5 z)2lopojorcw&<>0xN6C)@L7TMoR7RbNY25*!J5RaGMe{ROQt3@z=bjkA_Gy~(f$w0 zXgEESBu;xcMMH#|#UQZq-Z$~1ZB!v$^HbdX4aFXJ!nZHL zXllK`y=8g68DiD+iJf*6a*hD;zJe*mMv-{Lk8k6jbCkYK_WCyFyN9S~dUC9E`Av@3 zXsKS5w-PXFujku$>K*0^ZR?hrB2O;c?U=zPx<@y!h>n3a8lcA@mHwMfO5mX-JA$~a=!h#=ZpQ>B{R7L zK3^Tebq%Tlo8bHp)=4+R$MeeF&jqDcPjMUpMHQ}|l-H1x4UMj-e}YGX5mZ}LyXfxv zb9Px)Ssh7(+Nkrn{Nom0am}SwAN{x#$h-XczbH7FF68-sA<&NSXO1?C0ksJ**@br} z`fSSHRjj6uFrQI+MYOVHw~+Q0gf~Lh>{{f$SDpI~3S_#Tk5beR-Fn)ed9{shYh^}- zgeyNP(LGWgI9q+D#p-zL9^>5S>(qnBdDHjL@6KX%^S;1>P3}VD#lX`+N^9+gC+*7p z2NA^Tua*0X9t{@RwXp|`Ukm1716-s22ei4j+0O1Bp)D{XyVD07o)2Eu#@BB(su}6H zA(1iaJI90e-zH&Qw~#7FwLkGe|4j7s_daLTR08`_%)lN8urC$1Ukz5!9uiCmpvo** z&7g|MDPuXj1#5>nP>|*Vhel?PSI1(FtSRH{X&I`|goyK$J6{?vE{>3);ag6-=}RNR zTT%<8fmFD9{peiVJBqp<%%Xd51cJi1Ic0~@tTaUXApuAmWFUcWs6F^l=B@)7=FJ6o zjz=)vp#5;vZj{)Oz48|#)+kn<)mb^voi8#Q5h!>w{FJxi;Q8o<2GU;Ril*@@jiMl- zX;Jp)VAspo(H=6i19DUQ32ihThO18z$Jq2*s<%D=~$|Cz5Le*3#@|23L2LrAWz1@HJ z^*1~1eXv`{5xfX#b!-X=u?cnLXb3Wzv~z1;KJ86!N@s0qJo#!BrtBfs{7o+~UNVO! zZ*joRw8O}L)T>+_YpV|&VgYiaoecoZ37#-)#{qT70Nf@NXDb-CSCfdf94`0{;>Jcm zwu;ROuzUc|2nX4F3F9M>l@k~i z;Luu7M30mL_^LqwUo{GV^S)+9T7Y%)afRE$0AvvnbxcSn5RjOWr$@N^JzJ`H-UY_w zqZCi?v8*tO^yg1s<{UUepI;rw47s}>`HBhXht=f{wByxjJ@Kh>#O}H*`uw+hp{r6NhKSXTgK3mL$Fs@XW^Z zILpz?BU{n}^M(1yvPLILZ535jni9uE=PsU0fpy}u0idgmPYSNaD?L@tvV${H=D3nP zKWD8-&84g?)Y|J|d-k1KZb-43O@-UAYy^b;ungdlDuD!l{yU2qC0d^>2?QsASZFnfVGK*eBlv6KJl;HKa`-O4>d?tHr?N0aKswBt|2Vc1Ix z$@MS_k+!=JqwU2H#Ha%x)X-Fsc?-m1PDUjp6UQ*ODRN)N*hl|{nrfVh>4@^$@(wbg zAQNBw0oJ=XbA&>+MQzz>6JXZ?Es7wBq|1BYzTy|w0jbCNw1uE60ZoI%!e-ijAb=4F z^=VSUqb@~V+!;qCd2P|d=(43#Y-}^&x^!`wspMKi^Q`6; zfQoQq!}KKWQ@uP-;+BfEr#d1AmBI!@`~BnDIYEz{4dX}kbTyB4ou$v>zkPd;3%VoE zvQtCd)c;_eVq4)qdr4fzEQZH90BC8Whrk5uK<+HSA}sqAg{TS# z2|7ni;PLT%+z+rGj2Qq(|9htl4m7_u{{?|K-#Tf4EJ2;JY8#7k1gCq>tlk3z3h<** zHi}>Zn>~x@*w`ClHTqW^V;H}6aDY$^EK467Mx(=LiA|~GO(X{bm+$WjJqtV=km$~)`>vo z@}CTq-wl`l`>!8poL$ZtZ+uI1j#hN|Alv3dgGBh@gx)|z;o9vB{n~a=6;XIDNKRf2 z;d3Jr)W${h_HSnd*xxYy#GfG6{KuT7u+am^2}#_ptIq;f8P*~5nt;p%eDNIcz`_+F z_4)K+0+7CvOqfYn1!%0@7ibZsNk=VAt`lHt1FNIFp0DaHejqHNH$5eUT+BRtVW66w zxelE7xRkB)yjugZSQ^WhuU3qCt=@NiAfxfTk$$}qgD6Nb2~{8H&Q4J&)GNIZHVu#1 z+>{ng-z_-oh8U-74!e3`txHCX*7#00BXYVqx-Zp{JbANue0!q0AX^iqGUX9<8L-p<>w2Jt3>m1-ruR$nnpPE^$5pz@RoR;E zwULCq=`IsAa&+XV(*5~llbxXIwUmGxar&27g6M7+k;#<~fAqTGHT>b&K@srxK$~u& z6kGK=-1gTz!^a|dYH$mb==jYuy0M^g0iG*Mx92`)(@L{_?wu#ipT(|`#^z3Ao_p0* zYa6C(3Q+Spy_&X;yC?X}twVtwBN26TQiR(T_LrQClC&3@WvjO7;hEl0t2 z_U3VEATVSIOMK{&r~}`;ad&&obc;ts%;zyOdNXO*wxPkiS@!B6&LGp!BSiK5O$TDZ zvmm|CrP^=KZp+wuHcDb{6xg_nNs=bc2VRRqG`!un5?#AK;Wb8QaJnVtBSiR%K-u*< zjh!ZmtNG0wsQl2V5a~x%ALU?9o-^Yy-NnYzRn$U~-8L@hQ29%oY=(tT-NMBS>6h5jn$GRdJ@Cg{lqL7@T@vyXlrre?a6d@m*t zh&FDCZt4QSPX46a!|k^ep_I7B$*|M>_h!` z>??X-(J`r&`GigA_S=`_BP3f+3QKiETZOZ9C|KU{$|^i+mboRg2_^yJBQYMTgeD+h zcyf-GYp)Q<5?Ad6il7x`#Kq4u{5G)xGxoI$&U z%Xa9pq=uYMc9WRcwC%|llxENHR>Al{f)8IEQajnb?-i6;tV(-i^njCsy++qNW$Tl} z1D?oKnqfSQeY>0m?ec+JGpu3G-8ZJ7BdZdw=!$lkJSq7wHa)gZEsPf8Ko!N@Ghn!N z@!qloJ$r3!9D6B=-WN&P#;UYiyFg%Go-fsIexuHBjjzht-Pzfe<6`=>;cWXE1#*p? zL^(e)V=I8Aj2eE{`(|Cjm%8ePp+m2RYjYtQNn{sgv$^jTUx_^;W|*EOy}TbYIniu% za=5=IzUpLCaD9Qc^KG)b4-FGQAnnRGov?A(O1szVua-JI(*iw>2{?9XxTOAC-SWcv zzR9&@V~#wNs@S4uiQjS)GC1}-XiEz`Y^Z24*f!my;A~&sgH-+pUiumJX*9}DRikEn zw?>`M1u}kFR}wiNlnj_0z-lq78k(#1mh(Z9y;|Gk$cXgOv{+U3R_+v9S2i-MQDe8b zn2?y~&5z0)hHoRFmyBE4vi42XINYfx$GSxaDFnh_Jf*i7X4n`S5oWt#grxCMZ8N0Q zvhMeYGPmJ#94Yl>vgWHG+FRtl%&C~UF>9t7i1PDk?#B2Lk zP(IRy1WC)y>*FNmZz}2tPIwe5?4ERGudPoMkF;-oYInLA_$tSm^cu&-91;ey*!3er z0a&qMgc4T8Ej-q?WOQo6Ew;kdL0!tnN9P&5=#WQ$r{Xwfe%h>tBO;K8N<)#f(Ewwc zxltR0j(Fehb!I@sPV(u{-HlPb!I?z%(-!*E;>1 zIp^HtJ@gsEw^*BVXCf9R&yxh`Xfa>@@Bw>}D=n$Kfwyt+pI07v%m1L?Mtw^x|5{Ov zJ>jN{k(3F?%z&_-zcrKa^i@p3{6zQT`E{iV-N9=WrK$zy0aEc*28{36xqKgj7-+FA zk!mj-nrTt+P;j%apz4H&!%Cz12UP%<&yheK?;1a}wsj#)^no-&w{weSKZy>ku!Fyq zen~}yo$3jGg#+PU!I3pRZnGWhWj|O3v+Rd5tS8BArkz4jMP433aEWw5sf~@sdlF)w zRRtl`%ioQ#5)4dA+T&#EKs}h%3+zIaYIYaPjJiIo_v^36h#d5VX3#sc^QdBb%TGB*uKW3oNeJ_bpkX7( zMOu$MjpxgG#kAMAcs4VJD@K(Iw`^s$;1e!-ue~`3r0-w(Cg}wTBU^7+|9>@ zoj~v}08srZqWI*~Z`UW7XHj$aVW@Ra0{ql4zu;JLy>LZeWp;Hpa z*8nT=$vc^&8=q^jiF6B~Fu%Ow9|>x;Fw&oz#+a&8cfX&+m(0jQd)$KVlFB^yaW=vN zloHw_e1{Y~ntaLD=nmBnZ+mX#7Zd{~_Pi0cM*51GCx_Ki$|vJYp46_`!AdWk?;v{P z8ODR|tDVkv_)H$2FGvsWh5QxmP4sQI3ca+AS5BGMZcKEk&Q}qe1fvHle8g-o7`9>D znZ?%Xa}1Y9T)H}@2ILJc>P?mrk4DNsdbl3$3{h#mU)<7q_}s0?FY<3^a;m>&82#yd z;2VI04U~vLf{(O}3Y^V^^(bkcY-(vn^^tZQ5Q`iiLZy=Ur*Tp1NYW2&26ADZ1)bkP z&&e}ROp~wYvVBCCir@q)Za8Y*FJyl6)gSdH$4{w;8&A8OUf6kdJJPWC6M=jXZlpDM za87o7Yw;3eHsTeBAm!ZAX)<@tl$F?Z>yFuU()RaVg?WLGss?Mju6;th?zX0G30p#M z^Rmhjrv!rzX$Sjtdax-Q#CLeO_^>y>GDlH(SnO!U>emj~T}LKe_upnaGp_e4m|Q42 zCdcuPcss3bdlMVwz--Lu{k~^6uO>;DxrB{#oTI^d4_$fq6l$~0dY;sie4Q&h^@zDi z(;+z;+V3i4Cu|2$BIcEq223kmHUbvUVS}54aj%pZ&*W!ClI1GYo_`tdXx))-bThXi z%OmqbMx=xet~FYZL6>Tul=w=`hT)LbvPIa-oAx?KEUoPTp7X`~t|F6F(MvNAL_4I$ zTL!8REO}xvNt0C{ODocrmq(_>E$W>(wnJ%iT{Zku{Nu0O)=+;$c1L$Lvm=&LM7*x; zh75Y$93J8=TZwin%rguXULzSP4b^^fk#cUH;jF>lF z`P*Gcy1hWjh~Ad+Z|YcdEr}2F-l<7y>Q`2bHn6EMlwDmufRlMB-gUbEDocNDTWqd) zD?2nwjQLmx>}Azk0u0)CS!vne%`1Zk6CPW3c0(La_X5QG73Fm_K*S$uZNeU?ZJY4Q zh+Ch@T@481F}gFr=Zd#!m#;XT+mLwGm~!Do6X&<{%9~s&+h0B)%paV0c2m{$E&gF~ zS{@VrlEs+|rgwQ=>@e3>V`d?ywpi43yTgpQC0(cdRZlU#iq`jm!1=J(EY^P^z5#EkR#uL z8fmk7s(y9M^axjq(5akY9g>SVQJGh3J$b$^TW<7HC?hy&T|W%krnDvm)HCNzAqc4% z-wY=!0?c`JOWBVzE`XoEm-_fsXcU-S7Q4{E?Q6&+pYv_XBDYUZh*aF01i4cQ#~ts! zI4=L894kIw^qJ_E7IhB*Pf-94Y?t4gGhyX+Ys}={$8K^Xh0>0TbWasEG6W0UF0&Cm zR^%9|H#AKo*`I8-rgS#Bswh-s!*nnFLf9f@+55*dY@`n)laTV9*NtygEZFPkI`BjH zfjw#PUcY%&DI)Uo)T2RiM9yQ5v-V$dX<7tcUQyPpVjzhOF29MpG&`YsETU>c`kA@o ziGk@8#H%OPG>a0BHIr1A4|_!h`_&VVXg*e?!cXVN2*oN5m{--7t8&p%EJts%Q@>YE zGUX8Dy9Gp+LsM27gsp1Dt1Ig0E}T6$uqw{ki}j}dNZ!HNrl|zFP)$N)=%Tg!6w3hP zCLknIg_=yy_q#HRM1bW=OB<7~tOSgUFWF62nmlCl+VAyj$i;Zw?!R7F(_b-Rd)DEb zOmh?Yy+QFF#!mn0y%(~1m0Wp?)0<%)DjHQB7pr16kkb!?KetV<&!eZu#Y_0miMbES z_codJyoln*#Tk3ZPLGMRuXdLCAg+yCO2EsjM6)Eh1r* zbYpDFdK6g@8%y=MxIy;oxAZ&qx7np?HoA=@ef%3F6Dvcf z8S2xe9v`Rax<8u<-|7|b5$ZO|dR-RBa5F{%5B}^+w|m%fWJnrinb+-1Kx`E+1m*1P z(`cy6Rzzb|KYwh@<}egV5`_cV#W_Z8vV-A34T57|-~1iRf|B4c?_OY@4k*jtF?hjO zhhL@(nuDG5Fuh?0xb3WS6(!DH9sl$uggw*F&ysOLq)uMV!9ixKMYpm)(IPR9n&xTZ zyIGJ_jJ4PLkpqr=o316DERvcY%Tq8}BhW$S48 z4~m(v48_#AOW{dz)}2zK0L%`^sf&E{Pk_!KS{uoIA6u+?o59mQG|A=UW!DW@)t4ui z!|gaF79H_c7UM$6!%*aksSFhyR=4TbA`hT6l*zs3L+0o{6-F)fc*l^#R zRcK~IPeg`MglB_d`EA?Cd1J~aqE1Z*Yeo+>dp>;`sj#(s{$*@3=G~R((H)-iFZCec zmwfqYWFxKyB4_NrJbjg5#VbiCAwh7R=vRAadyh!7V>|~iFf>S9{>}L~`UiaaltgCO zJZFH5!PRJ$vX7l*(E(?qFDM!wo3}#CWs0X36MQcY1*JS^d2JhH`H&M^Mp-#?`(e5> zRHt8mr1^7JMfA?1w0dOM^_9SaE}xMI2;j(;=?#U=y~6>?uXm)Vu(ZZr#Ex(ESo;G-er53*qk2qUcTK{Me5 zaOFgdP7G<{6IDOLT1=gi#Vvb6{lWanE3SgKifJo0*5Wr%lhTsqR0j^Vc z)%$Fq4FH}Q+K>v9hV9aL12A98_67cvv)^Dd0I}T6Y8L;h ziwGAcguocp20ge0P((E50*=Z6;xQcegp#b=(CW`8}-md=kqCO4s z;IX%L06cqh;~2oG`eo09f9-7l@9&BA41<*4aHGP!9vj^U0I5WZEs)>33n0LMc~4iM z5G2e(YZHv3FNd#05l%(@g;C)me9is#?_+XN5i8(PU43!Ak~_6CQJ-K$wh#Bf*zMZN zVPFEo9Pic*3$(J_On{Ch|<3R9qUpVL7a6}r!jO{1A3BGe=Uaj8qhP?`{+B=bn?U~O2mh&H|JzbZgjw*@ZZjinFH0?a zl@bu9{b2&%&-M>KMlul`y1dkR=@%a<9$ake_1j?)Fyh v5qN7tj)F*I;xld%y5B!?K|ZAUrUntX9GX}f7M^&?_>W9&wBdf diff --git a/asset/architecture.jpg b/asset/architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d3f588853fe0fab2e35593bce44157eaa58c0bf GIT binary patch literal 83337 zcmeFZ2UL^WwlEq+iXtK)MM6MP^xl)u5$T=K zA@tq?(n5zno_+4w``q`=9pisv{Nvqw-do?u`sTOFTyxFU=bAH@W0$jl+bIzCK@_$6M1Mu$J6953>=<4!H@!36HJ^g#cvw!6H9cO9| zbNc=M7Y>gXH}V@h05Ayp7is>h;OiEaFmrr@U-%!J3%+nXv3KzB9qT{fhreO7KVXU9 zu!pOYD?ZK3->{3;D_J~jfrlSj{{=St3vBM>@;m(}d>RRegWK=2e!Jfk-?VfDYvSJ| z_#XoR26zQf1U&m)fBZMzLDK*LkplpL;PanhW(fcQ>H`2kH}Pi}+cyA!{5=4G?E5q9 zPo6lLx|seA-8H;_)yfJ0*v$q2$n*dJs(t|AhQZ(B@ZP_m?H)dg0Z$hc|5yVY0G5Dz z040DUz#PDhhxhF{LuU{vlAiG6=`!>bx8#gJbC~s5Y;oHBFT=|`o;2H@&<89LGr1;SPO?UYNKtXaf zg>Z=A3Jc&W#T5dIE0@gxMm)O-09OgF{6}R003u?NYlK$`uK$iUz76NOJ5Ys4h@WcV~!u2SHOr@YTgM0H0-0Ge@!=R zxjehP2fJr;GbAanSBXKE)p7Bb+C9goGu2tuYfV}9MG%TUwjNaaL&OK#BSFM&UP4Tt z|4*A~>|v1o2PGdNHV>|Bn9nheqi=1qZswRDF|%Psc;;t)39v)JvRz#Rwx7)a6_wf2 zM*cZ6^`DZ$8PQV}3=l@H=rDtT#op0?!g$)9gVgi9fBNwBP;~Eiu5c}T0fJltV#JLu zkgrYJMgnlT|NJ#K#fXtv)bg`(@?I<~_gGl2{yTa+g^U!okXuQs z4ieTsML?DZqkZISJ1l?UumHEsp}c-4qKG0x?Qhaj1VI@dvDuz!isNLScnS) zZ%bZsA)T{0dtt+S-g16BGpZpuW0xihiYpYiDJY1u$|9oYlq3oLxC8|dyw!JS69RX- zfI+?Hi9Vtklq8bDoC`b}Vo=45#Nn@N=SV0`5Jr3ak$AM8x`Yaxozi!5fd+js2^G- z-=)ZAUJXw@?|rbN=a<{hyvV91jRs1eCM$oMOI?3b2Rr617ymA4%)@=t+1yLy>eCrW zAG&(?KYj0w&{rat>4(9YcM?F_pEWdB_&ZmZTbCM|+h0Q?maj8vjnrj$nwHU2P+^_- zG<;z>4C&273{c6&hafK@VzaYZ3e47Yg1mE_hC$@%MGNh)1I$1$ zK>Zi#h-#*~&G%Y$ow(Nm$Jan^e*C@)PiLMlj%C`6N7E(GGIkS8x`&xpYsAj;ZQO$C zrN^p@wejeC2tFVz8rM;M6snt`*{wz5ZkzDqV|4$rGYr_%Ymc0sTPiy+9TrKf9u#Nc zaNUs8ml~P|`8cGc&R1`0sv3=i)3OD=bh4A1?N;8fd-yy`tKh5jo>mGH#pIbqU}al!_34YQc9MNObYp+7;wr z#rK0CEZ7}G%~dze-z{4J#JXP(tO2FJyMh?hG05GR%gi_Tdz}6=mP5?|*rd!bDo~ZN zcMV!fgw->wM`+v`ETqQ>BK6r*^b$tK#jW9zPf~OZP6YF*6XVoB>+eeF9gS#&8202H z*bA~`2}zWeDRRAfGwuAmjaVS|-LlXwd#l!pdL=i^x@sjcE|;bfLOXe}$LO&bzn<_4 zvhVb4%yvFn+lM?RSR(8?G%nx?w_sMU=0^pARvK&)vIR?9vDd7MUDeM+ixcju7p0zP zSzQ9ogf9VcnmmPJi>XG^`#C+AfFt~v2rO{(Yeh01tHg^mop(HXqTB5G!Eggp8b>$&Pm|}qU?7*z<0h5nO?i1N3b(4jk z_3fA}+4G)nS*Kk&y;P-gM$aN5Vt2K|ODt!Km77I@rLXqE(uL`pXWU$yqo`>P)XS__9$~SvA zauN!+MeBlukjF+Khk{6dialo*p)I9(bh*M}${V9%g0lG1aAP~Op$YU_QuF44UQBEj zR8S0G|2N%#Us3+Hto%E9FP_wK4~5I;Su$OJYXTjRh~1WvVe7f(wF^_Ex!8S%vOVGK z+x)C(l7C!Jp7kXHSQWQ1saAlQYE7g(j5)p4LgX!<79i}+K8Ow96Yq6BNTQ>-{J#No9Qx5rnoX4ojZ|hWhq*ov0 z$ds(Ll6{^0=HE*>(8%RFg##w2p(8z#zJ3!k>~MbhV5B$AsT%;P$yuxyTXJT8zHj$x z0dooP(yp3$b#jmkdSZE!9gvqPj#VU6%E}^Gz1`H31i^G@TSR+sxPZkf`koA|u&r(b zW`0(!N92tPxbuO-s4JsRuehEvUjja?&1JVj5)NxDt#Cv$I{5ey9`qEio}| z_xXwEha?R_+X&Nd1(I%V6p&jP?NFS<&vCZMSY<0k^UVBgAGl&j)lG*t68K|KEkVzU zqhd66VI7$5u+kK!xqo#nLaQp7y?R!UVF&|7E`1Rs?B62I@KFk=`XnA$-QAvL8!|(n z(w5~Xy#iXko;!5oAYRyO`w~p<3%y9n6DMIG-R<;uGgJ9F_4{$djL1po*ixDA zL}x(9WGQfv`&ZZI$6KJlWz8DH0m;Bhr*Z4yaa}&cNUF-RoiLLvZM!4f92lC1pE5RQ z=gP-qgL>`NQ{#yz(_g^@=e)~ixM;6~5~#DPr;M17UwDr(-z+@GdS3J5zFJ?904--V{`t+N{Y#vwAi8`b5`}Fevu9; zrHi1hnu$xC*f~A#)_V#pMJaHL-W?O2V{M_&wrZ^^+QzX4)vD0;j;kw(7>DayqMVnI zEyJa-kC3TS2}LG0IEH$7(TM7R$~rB2$E@jfcOjPt%_Ohbkt4cxld)Wn^i$2|GJKOU z`L@RMs?jjU4aVZ=;m`V~*j_b-o2MZ+ATXJj(1W(<tg-xNf*L*ncF~l0a)>Ar-&g+7{L^ClRk_5VDA3AR- zbbX9INFRD|5;78|W=_Lu2U8|&ph*iICY3oPAR*tyPIbmt8x^6d+a{qpV$~;AQoaY8 zVtS0Hlk-Y40lvwues3H%7Yuh9wyIe>hUg&aKLTe?rQ)>QS^H}A;iV^{@1acL`wd}( zeRrohi;OftTRF@p^TIUEP5TZcq~a{39|hJoay~65;4l$chJ_<-fDuf=cjScjlYqp# zYIiHoPxC_4($b1NhKAMI2A_LLDKQwXFlWR}e%<)byA8q#^J6vj5bdy7&ZsG_VF=9d zG3X##vz=58D-kaT|XYT z|N3EPbpGJ;RGL4=5fIqxf6;;cVP9`yWey4*ec8pVwWu z!%o6W`$>Ds)iXK^`5?2CymmQI3e`Q~`3Y+&wU$|r*SpTZH!p6;(6TQ;D#th2P)3CZ z0$?ZXyo@GQdQ{RI1+3FGM-u7E_h(7YXDP?#yMF55JTJo6jHzmwfss7q@JTP{?KVH$ z*1J#tvt&i@_OGh_@X!w89gN7b7}A)OqzoNZmoU>!aY`=jv)#qfjfys?S6p4(?+NQ) z)c?fEebXUo+&0`*#c9Ut-NXofwN&!pneIojthow(XzHDFKH3wiOS``ikRd%F1bvs# zj!qOxbi-1C!SYx?G(|ZC+1+zE(VeiKkTX+M+Awc@cIQB42s)}ev%`OJW5fpK&u!t& zQMY`dE2=uyHYfY4q*ot96MYTCSz>@NQ>zeaz*~53V))4h@Pa*{QNM?(r8`pY5dL@aOj^Aa+q2q1 zJC?_iWzp?xW1P#VyBxU|;-?BilAr8TP_bJ8uS1OaKK(g#EiW}Yw_;GeRK;w8`g5Dp zw=xT^ob1pd1iT~Bixv9F5=L%1&|89=j-I|}q2&QH} z>%Xu}^G}X*>ZN&BMXkd3I=8QT5Bc2g_zTC>|HAP?tB}7H+s9e^U_)b5mi@0S>Zv{u zl+ki6x((L045Kp~OVE4*YiAa42`1}{b0HphHq!nFEs+D;*Ug}KqR(cecDu#desTx( z#bB5fHGe$+VaPB}=bJn#@Okbu(!5ffqHIlja@1GhEsO&V_m zl#I2ZqP42V%TeZ#tdxFn9~tq>T_}^^+uA`A^ClUzQ=`ypP7|L^6Ed8~>W1}<-&dFG z?p9Gxvj`5;#=if@VUkh>sJ6$bSS^MAsAo|OXZMVTLn1_y_N%t;r{l;DrDnl3v~m-r zY${QQwfY>Q-(tmz(qq*7-QR?_ZL)y`zj+#!6A#odlGVLysT`Dt6?~>Tc@dIs>b&Lm zLogjuBj7&cW?BpyNEYg8wJMNEmeWw_hJo~k5*^ha*gOsR2N}DS)|K*Rba|!c*8{G2h>X6NdN%h}p@Dp; z#xgXcs)*l!M{ub4LCuat`g_JU4#>Wv|JRZz3Acedfm4nT<&wOUxu89_7!VMmccGY> z7!EOS!pO%@^!yY$B>W+cPCO5>zs^uYBMd=qe-}8sh8MUkDy+O)mr5}mdAM8Mrfs;1 zyS|>cK>37Z?rXGU+H;Tc4mSGb+F4xu#iF!GP|Y9R@Ek5UbNv#8YKx)n~9S=Y&B zQ6hYKt!s|vihAKylQ~mOS(e#ibG*KV10>mk5z)gPqYA`-7Y5 zKgZ$mTW0F7RJBhULoNZdnn&0F!U0HyI-_f`s#M4SVNOdb2^wq=ahw^c&w`L43q@bo zvd1Mr32PC{Y=3FcN*(`j!61y%+MQRrjsq?Wvl=5+Wsp+wZGKkAsW-=%Eky{5)s-dD z6Ow5L(ddCRvqcPnUcYc)Slgd zHTz3|=KKYg8B0OoIBmnS@wiCX6S^-n;X|5@8j=`Q& zpfp~XsCW6DZinSC6^sr|Zv9m3e6|I)qIqJZt~E4#0IS{(p*Iho+CB<*jlFk2J*T$I zxUHvS_sF03{no_#~Ku-22t*<#vbqVHnYrWiC7+Ilj|SYYuIaQ zX$q&<%T4F`clTDz_R7W%JT-9cmRcP7!$kH`h`qL{hfUtw3 zxX0r2Nyq-WTSKSkZkYQBbKRSxtl>jSgob^^4qTsu-+yxO?+SxsaSJ5`r8D)NRXuZZ z6IRd~*O}^WJAqr?)n?VU;dPg2O#NkQ}4 zCUqP8hXNy4;*=ZPL2e?ShEQjIQDO!#d)BC!qXM4bHs1NEl$ItBqD`48*O(2mUJNx3 zzW0I7QCry_N|YG8*cq#;H1GU5gg}wDgqZT@jMMgvYw|QTFSW{M(w@4|1>{s13RVd0 zo1X`NkmnUtDC+SR21E2B5y*rQ{E=wTwzenM?xB=X&K)f)pnU!H4Z_wABX>V}kox;| z@8@ZRWe5z@Hf&-f)p_z1DRIM3p^`5VZPv=07dG5Dh85g`s#Xbc3v4qObiNv}_!3)l z)_)xsEv%spy^)xekTP9$3FwMQwjb2k><&y zwAKYQUHX}H$?_$@Keb&>zDu(9A2My3{X;eUt>c;X34PdU(4!lXwlli{pDqEi8Uao% z_f5pD0!&Pb0))v!4p&B4SW3R(Gs=%xi~{Sj8jV~^#*DlxHGi6@Lm{%S1<9FID8feezC)khO2n#&lQkOoRrmKdnZT$F6O;&nR@@Y=79cO* zh}m6$BSzR|uKHj~kdw__792WH?|(YgI;f})_SoTe9%y=T90Elkk&8H_@}sz!yL)Fm`Z%P%Jxn!gkHWUL1=)KZQyw6-=q!lc z_clLS)?fY3p#^b+&E3|`nQ{`XVFatm1;Qg0+9mWj0?hZk6nZ7=vI8q$o)W+Gu&)=j z?A;KkuYX5ft2KzecKFUo0$N$1%;8_aa%lVD;DVgLNyV*uk(YqzB%Kpk;#0(n z<}kg>xz!vLN1RGv1QaodmLt(^1q6t$4^L`fGGmJNgZzwc)MdkWDB*9H{N_G<&= zQ@3>yuR2rMMAL<8g+EVDgb?_jdZI4@mw;!(_WhNTr({x9XEPiZu?+`O99!rMGzATI zIif6QF*R;g9tdgeG))>*`EU{a0O!j?4z-T#U1|sbeW4{AJ7M z!l`OS4>YFwGaXL!a>IWV>VthN&5O!3>r;l^_6PdbxPwIHdIL*iiBcvBu6<}4-!f>h zG+l^q@k{0IDn8)XtcG6#z)FJr=FU9kW|v z6ucDMvDzN$%X{b$>K0z=4OI;a`yQ|+80@`llkMImpLSpVrH#Ly`hy6#ov-HC#B)`T z+&T)jIL>tQoE-)>pY*ASdG+I7!X6u(zS@Z6gGep>Z~^~Z1HZUmGo4W_w_J;5U?(vj zU-|*?2x&tun2DcLept`T%qq%?jX=U52eX?-=w`n5VHzC!D1f_nPN+bmOnMcna0ytl z^xC4Z7D!gTn-H!yV}n8Fre;C%%wB(tXFJ1DwMXtD zXG%21UWh6C3Ano6DH+sk7HPY~b<>=_#8sY3;_wVg#W)fiDFYuIt19Tx z-ItSJ8xF%J*@5K^+~qe$67$B9Rn?{40!{bY?aD=09bLa*+f6IVQi`G#_U;t>WQIDj zI(5)*iC4swibp!{{1oWK+H~9P8WbkcAYN+gh3D^r6Zu%J*JO`HTZOKZ20C$=B7Zpe z4u1=2FR5&AUb%otw`wdfdGifh^3a!40Fe`q(o#D^-M7bu;%ldKnp~qV0k6v}hJ<|z z87;wJL+87E%fCa_9}a)8G@ckNOEKdO&+ zO!r(*wvW#e#?`2oANA-Y^gt5R{lq~+p->8%O90vYXn48Lo~jaA;zBO&rsktEbI-*u zLK+6L$3*qk7s_7{^AFeWgMvRI()jc`r4uhO6jdt*6)_JHb1|5E1!ex)VGpg8720)= zYz`eh1-yA`%LTO-aJbbJa`FtB7W$CY;YsV*!fP^neIYV}c7Q}&VqS6(^K=nZt0l_= zCTB8r#5M1fF33D?xfbd)Uub6r1*hxV1t+AO+9mZK*N-R3=T}dO*H{XUGis}>KYm`O z;sQsrxyFcDYj%&S8O|EEeiZO5xQAnVSILAQOhSw~v=}(wE*g`3IP}_m~at}37pbv9ffGaY*S8D>8sZk>{g{8=_nblF7ZkKxN6tI?zr-iyT_AwT=H;_aX3D>Xl{1! z!=X2eG)Y~95EJbA!b)+Q0mND`$-NqEM5ZcUIe9G%!NKnuXb5(PFXr^ZLv zWJCx@PxFape)xtXj;ngS15#|;Jw;l+M==&8v8Sg;tSGwV!bxWHvrWydLUvkraj}(G z+lW$4v*W7tg3DQ@L;6(Idi2KYSw=z*^g;G&Ez@E}p8Ekto!QiA44ji2j)?R2UY;+i z9x`0{A{wpLr$0(7CiF&OnssU{s@#2#^CNuqpmQMyEP4<_`_n~x>Y-^yA!>1d@rdu4 z(NCKP6iRLGHP!+Z&}PQ7HXbF=QvHSZ}by zpf4t32Xu?>(%}zZNfId;B5niH)6FwoU&gjhBKJ^nY1MCoRunTv)Ey>kE{M ztm^SFqe@mBHI!V^hzgv>s?W~ug%xg)%yQp55uIPnrZKzt$~uVSAzo3_jP5tQYZNi@ zIFF02d`vQUO;tAUu`FX1xlOD>^XRQf+aJKqnmi-6_St?PrZ_R=gd?&8RFr7S29KCi zH@LGszr_%NH6?J5IE9vM73#kbdvU{NHOJO8EBiyOc_19U^QHx@}mw0E-H5N#CgJwnPjv3@cJK@fYN;kZLd0w z$qM7S?R?kSLPMd1T}0RXh2lR*V2pUg?iulL@-UUX!cqMsF0?0wZpN{4xJ!qxhS5CN z5vR&kJ8F*~S8(8id(pe)&7kDRToMf9R>o%lM# zz>l8hev;|YAOQU@uUnYyGSA^lK+8@5+wraO(|{8boWKBA_qpC0KaayZ-nHt(Fs=3# zTJ5=UmG?~Y^;*LaUk4BX+q|iazbTDS8dQtme?&jYnah<j`of~dOQhNw49u-+NVDc$rUHY zqrTo7!2_?ojMfw1?pVLh&T!L869NyCy*Dj(9;>U_nOkZ37LM~^q^W;d%**x7fz62k zS48{#7c;SFd_FTVt)@PdH{Y)ujimSWqfi6EjHvZ5!tfH|;R=&S61D*;0jKhRf4%mS zN)rN6<-2u zirXZ&fTCNhxUak?QWzBPuYeBT@80%@0fM7LxC)G$`u+5Z1&IA7lJ#Ct!COWhuE5%v zQUKyzFd36|mDKASN)#Sd46!s3U4yYdBFohe_>a1r-+fRcr1+??N+^gl<1SHMK! zRT~h|5gAqJn#l7-@J&is#L$ZAeoCNpC3On*Ir{9CDr`8%G<-mbJ=zjvPA|;Op7ISq zoS=0BuTK65_n>%U=52eMnLZ-cfUfWSnvU(KTR3IKhhbriC6Xvx3=-pThw!$IyIWTQ ztqrqkuI^UqI+u%Z;MrP~0Y8wzAMQ#d~((?WNRU&kJChxL1zZ!_8FbW4Sw=e-XT=3ulUjYOuOZXj!FWOdha z7-oNZaHKLKiJin9@vH=9}p1 zzfEs*rGHFsPnrU|rf(D-YPLIjx(<>b&GPWREM1fDx7KaP=ki+bqbQ;>+@Wi;w0)`;Xs8+VvvY9~L zZnv}X#8!d!b#{Z_Ds9)#I*4!5hB>JP!-$?uLJeV?lxeDgk(_PjRSFFBelZV7lS*L0 zS{1bPqHA`h9(PUQ zd~GG?w`{k_w~gQbH@>O)e@vQ8+6han$eyIU`J%lMd;B8gHHX>4Y{{lnObN%~)$+84 zYMxLf1QjTVZi+417WaIFH{E641`YsteSP}vKN(#-@@LFHDa_8g|ISW9)ii>ZScsl9 zqyMLSfMg2LkZw7SQu+D4Ee~RsG?I5uHQhRj!MrU>DPXf>>`fJiXEBdjSMzmOo2qC; z=Y=|Fw^?frPe>$3lLRr@hMA>pIaBQ8YaHBAu}!g4uss*Bvcb;!sI-<5Q^H2`#$6J3 zcjvZ^W|*sJoToxhUSeGKZpRN5KGK`C!7N^rwWUK)^C`Mbbd8t$zxDn0(du zl=sJN_bqbsZS7%VBSu+of`Vhe-Hs%TQP-LJ!_tA#w(=SYM_ne_q?+g47;}up-E*3d zxE%k~-4)alYX*byBMa;UD`tU{vcA+|Dtn zk5!R<8uZfmVVc)W4H^IYUh}8GkAQhYA<2lw6bhTz{V=PJ@tcX7L&&d7w^Gd+sV&jC z(8IR_vj*y~`qjFxRXUQo--~Eb#hM$!V@Isa{p#@@;9^XM=Nl}~>6 zF*E{yoSCy~Dq#s#JUmZ&atSE5gwx=+C`3Wk^GE)QeuJQA0$j)u4ZJ0U8{#EmIa>ES zcYa9Gy-K0ybcRniRoEPqV~s{3;DV7t?RGcHv?TPSEwCER$vpxCMY%pJlBduzlGlXI z4h*}8UX|b8r2QAhPTS7Ddm@eNl02l{+sNz3w4TVCPeYND6%{E9PU1Uk{`1dPqX>5# zHav1V?Gz07ZvG4dp~|E1b|&!X#i_~u0k5vRG3{QkvEKu=s@#n+?bzY{y3TW5{uGXT zYdbe4Y6#M%z8CtinrD294Q!yjIx1d80IT@fXZXP zst;^x|J>4rEJLLi3BtsV$yy|U(x*t2=tUomWBJqL^Ir$*V$rDHn z1qRMQy-}M}E^hn|ffcl>GLA})iwq}RZ!yYFq0i`Lm0U{`t^l{kn_R@VXPmxk*u=R> zXNoGbAHP~7S9g5X)A0C{m3OlDE6)fXc2-s|m&Fw(ad9US>`d$T6cWn_+l-vy+8Y^& z$@ibpQ#nCRYWVEIMB__NEJyzn;6Lwe+W#6nDd194Dclv9+5Ir7FI>!H_EI8T4 zl(R-b+Px1;Z(I+TaQUdN1D=ZuwR0z%+$F|>Y-U~?;@&Ep7OsV?vPYW^QJ@V%ZyV^MD6SK{9pkHrSJbK(zw&YtG(x@FI3@NR!-Jk$!I`f7f#Qm>{QI27?Oi<4W@ zJ@?v=1iS*?ruTJIA_dB3sIx=K-dmbgKEp6C}r=!X@wLUor3|k0X0Va$Wa70=Q2TwKQH`%%`-`;9=cy`iRZ)Vr5A(Q9z z<+j4uLgc;5(oe6i6x!r|#@n%z4v7$E!bB^ZJI#j$<$0;7#H~cLc+k~Tks zGunBrDEVh2gD#O!D>*xI7(j4tsI!%XC>X3Y`eb8oVEG+z zrG(&zSyXYVYioS3b-CMUNQhAF1dmW~{c7a;wl7+Yl_R=SLxG9G80}SIY=v14$Y*W% zvkOT5*;k`jhIjwgK`lF+#GVI~hjOWSu%*B$sE{3-1BLDYgiVM`hq7jsQ9JhH19iRp-fm5R}NuX~!;XbDR$q^10JoPJx}8A5vq+ z=ynNUXe+Bpjw?uOajZ48B6IlawqKBwFqdxi_VDdI0C4O4jgiNn^?SvpeQazN&?dQC z)#1c?M)Ch%<^QQY{x)B9{9jtbkhAr(ttBpeh*nanq@DvZEk-vVRdd@fu7p^)9a;*E zXe)iSuc-#(muu0Q2U9U6$m>beIp=FL@-yZ5?yLjlQqsLZoS*|2uFaDauW8g;a$kayA!-!bD72b;W?zc38i??L562E;W@At&(13R72uo$m2 z8nK3F>|4@}?Rlr|@DJL~Of?Mba8s?Gfq)tLjX%OPh2kT^_B^&IC|uQi{~=WRZ)aC1 zlTl57@e)7H_qUxMjST4)e=lAl!V6n(1~i02={J z%iv%`l2wQCO*qH%d#<0ToXL5234i#B`!OT@kA59ZM=tQUfR>s*FQEoe@GiDF?RZYU zi7U}o@tI-bnOzyVc^0_bmXn+lP23wb>#HxkOy@^-BAX~;&w<76CeahzcJ+igaSqHymwxM0($B(gAuw(Io$O707`63iE)VcC?{R_A(%<0{;s zq)n~so?ujVL)pUPG*(Bf%~aodo>)0lQT!#w#ejM`ZArQ~J7d}aE9<81_94$`L$uvRj6v=kzb_jdLJu@5QE_IX zq@oi}o9RWXS$^%6`@m-WmsF>6bc1{fj>Jn&yM>?UU}>|py3}hDNEa<1IXJpwh&M+m zdya*XvyL=U+#fFiOm}(Bh` zY`8FM$vp$9g8hIF^EQ&f=*+>nJ(8A`q3h?ev)Oab~%-uszcH!(_=s z;tlD}ky>|*pd{g=TOM~)=whF-d5(z)o1X}634`Zt93I;gRXel0*$r1{@blXSFDC>i zG>nI&Aop{c2I;$-ouQbPST!l1uE`f=vnHw}r;_ z!)ZT=czjYCL16P~FbZ|Wg=m^OR8enC%O_cvhtY8L!O4gg zXmg=3u&%XY%Eke?MhJNr8~uIx#!1>QhTUc8T(uBfBYLo0?L3_6ZUpA!b@v{T!TsoC zXOszR;vA<}?|o`b!4kwujro;uyl$LxJ*FVHKiAv zV!9P;d3$u=UNYXY$4S$tkFpX%5UBIQL3;zJtQw!TbeI=lML3o56uVyp`gvf7n8@dG z8~)WI3k_9Tw_d6-vv?gBgX+J6T`q^5NEF484b?~vJbEy65~`b*qNCh1k8HJqmOn$c zU_(Vd6}UnqYE>tdcx(+h)gFW{()E73uv(0lT)r{MokreHHw=H_=?4nz&CHD!W&eDA z0y}a2%IS_2WJ*)vebex0bIZ7A_?PaMY;C9?nyL_I1@TeEB8PRdN(B*5e&Hsp9VVbS z{6Bv1)0}G1B5)?DvO_D{?b}C75wRS@!fbEz(%@;rfDs`g-W4aGt+{)c)x)BJKJSPP z%e2}d4J`vnAt7mWz9*ke@;1AKU@w$s?7CJxNQzV=+SYvk9O>SFgY-uVvVFlEsJU7( zea}aiXu!+mn#=CgQv=nHnrlHRi#j#E%sNhK%`6tW%bFz7H&#Q4zX~Tre2e|HI8ysr zpM)_~;bT+ta2C6nhhsw045hG%^;Ga`_+fZX3Qx#K?<^K`|D#|;$%-HHd<_n_S8L6T zWGU6F_IrM8Y6E)c^0&g-3 zXemIri*V+$M122xZ|J&NNXxgQP16q%WVlL1{j5;EcE04-Y)&JALBCQeRF*lU(5G3g z4`v_LJ)D@9mxt_#A4mJe)fMss@z*LUjlQkJGfU=zmw@L*Cfj^G*__KlMVA21yTvE+ zE_iF)C~uC{4O{_qDzax~CWCprB)~g>O^JfGptj&2Yp2Wsm0Cm0ruiRAiaYlBb&0RAmRj`9X5sA@6$noNO-2%B6C~xU{)u?jk4G zoNAcv@OA*7b}c0g>g&1qVtUG1qS+P2)44#f+8;5Hh>gxAgGjv{E@I+NZcodTF%aVG zmjnf6nFsQuM=$O&O57Gxo#6?>1=c3TwpC8TG5QsPbfx&sp{Ct-*`t&wT((7b&oT(f z<5$CDRU}a7scFpgfY%#>vTI@1$0%^*8OH1DluqA0%9OpRgb58njzM|5ivOdb9I>oj;$w&gVp$Y~s z2Zjd`mDysHuhk3lkQM%Fw>MsBX@VRxo!46?nS1sU6w1==t@mGCW?nKk#7F^xT^P!qo{Wu`1!p;PQ``HRH=ATi6DNoCkAoHwr_KVmXd`9 z&5LrJV5tll?-LGQtJoK)_VLX`Ka->us#73NVdJfjbO%xy9?qXC7W~OP2K*N zfUyRkrV6eVHza59Xo8PP$m={+JvtqR5lUPf_UwsnQBsv8Q_ECmJfWMwA?*uu8Y_MC}AxQD1cVB4d6{#g5(WVO9=)f$GZ_bhAzbZPF8c z1zMaHW&Q?Tex)DkNxz~l;fzR+37Z5Ebit~-y>ma0Lwg`G9Od&4#hJ~yb`R~L$TiN5 zA{V?s#_U^oq$#D~Ca_YZQWT3txlNkJx1?&oRQPIy( zH|v@_u$AI4=e=>T82yu9=FBuz!4=(`4Ot-MV1S2M{2*0GxQK|BTyJ|ga$j|RG|cBX zPK`hAl|^yAkeJ6HDdU8JN>NmkEmNz)mia1iGlBU&_pd&ZFHfyre{K3~eZM_2+cM!% z511%@n#ZfgEN5`tcRG)wbwJjZyC@L3OZ>ggyd^rhAIuO!H zoR6P2p8PTNa>x**DYpL_BCE=2YrXTsl{{GJ$w&z*ESW)gtBgZtZWKIUqfnsMo`}L& z_0$Ltms>9Qjj*cDYp7<0^(+f@YaU_8QEuYy6CQeb5HITJ1F-XV#3XADd{E0KpKj_f z)D*}D+FtqlR?zD$G0{rGOH5hVttVqDyE8`Gt;)bg2X^?ALt^rbcV%gr2;EIr`eBP^ zh<1&?_u9rf=<~o}8+FSNrN&^*7lx-^rU85+xE*O+Tvn@VG~~sPEHnwIJKr*IjZrzr zbheS_d*n5(O#)xPro$!d8TPz0)K!XhqKG{=Tie>bZ+Jtld&WZLeCn{`XLUtA&v=?y ze2Pu@ssBYmvplj};e4c4SsCeR!a8Ts?HYyc3H%Yey;OO~O%};ky7=W*weFS%cmQcT z%O~t4+Qc~@)92W@Qwv>mpQI$=s03VLIG}fDx&t)ruyOO`-EHMk$|rY}?m1?pZi|4;+2eO*Ja`E+O#K z&AIxXv5Koii)un|({JVeOsmSvA7pmNu-k>Cl+%Vs;gzSRG3a+$8_ij~_F0dzhSjI* z$3m@GEgVwHJ>zTjv8?WOd>98>F+2LCBt`*VlGRGdMI}!2Wl@n^prwwf3wt#Tyz67Q z<(Fen(|uH<5*v40QEK!OY?9>b#WjAI+MCwqj!# zld+Lt81qQiIE2I4o+dcBLhZa%GQ%O&h?kRsf+oDi8eS_08Jm(DZpBn{!_=CY>v`rDgQ_)!$4%o$ z6h?wJiDn!QU@%^LVxEO%A;qbIegyHo&;~&EhM;I_ZBtrK4CN%R9dB?O2A2uoS| zr;+!9mby&qG0^RC0$Cq{D>MFG2e)Y>KQdGHlFe`PqReWe@Cxbv0HRZX@K(V8V(z_z znq1rMVGse`NKq7o&=e2^0hLZDB3%Sjq&JanAoK(X9i>XIQl*Z9fzy3{o2jv5kf`A|J9KsLGT`RrbS-p!;3n{izxsh_1)z^xKY|vS=hNROx2^(1X-X>WD}i*50&m zZimj;Bl(as-iwW_hpq~mk SefIr^i*)z1mt{#UEm`OGg80akJb8ufVZMKT%3kv0 z<*VoS|BpOV{`(ncj6qc?cPAdQ6@X?&{Gk$vrqiIf?j#fmtrD5e$+ zQE;>g&Hw4e5L1@=8o}%`xNH;IL-_Zv*9w6>hvq>?bb_3}*5Noln4I6w>tGsq{)ZPp z=Q zl--HDCI!J1Kj68oo!_HZA$a<2wu|L?Lj(YaxVnrYlJo_noeNCJo_03W?K1_Vy->T& zVnTSgNNZb|dpU>f>Dr9I1R-ZZHr-?KN(Cpgb(a-C$xB@tJuR)OM8_AgwAi&>UmQ@T zeoX@`wj916K8uX~+Wk@aPohUJ7Mf?p;FB`i>{-?kM+afM@IQ$dS$)%+-g+f8ugLwNQ&A|`Cxmy( z-1E`2TM10YH8Dyj{O1?S|Kqy1|Mg{>hU5yu_V3eM^XpxGnz~MYc}J_rpJ>8c2d_(f zylzKOXyKPCfN4Q4|NiIv{*$+NR|U%^_ho>gJQ?S^g^Aw%gbObb4QqTli%nBf>35#Z zfx&3--3~90uS_;!>af`g&kb$#&+>cy?qYa{EGS9VcwY@6G+OdxA$ zbHRSQ8f1Zz^_7vrG^ave5f23Lo zrC;$;jU}$*yuA;r$E#zLiKU|{jAhqvJjjnCk65*>mfhjiG3uuum6W3$hs+z#>1Zyw zT{vn_HJ%GseoJK)OzTOPq%fpFkoP zTgDo1(Dp;=MZSHflB)yayF-#`D}NQAMKTFZ+x-|lgiqQ*5UEb)B<8=I z6X<=XX2h&%ymt^KKB~kqN|sRDH}lJ{c|;U{@Y_-*qr# zqg)$G&dl5`AaO8S3g}?&I~6Xh&q&!JGc!p0M0x;An}RQhum13t>a~3)*e8aro6WAk zWIR`?JmfVgnQ6?*Rz520mNv*mLTUMkAV=CZy=z-8)ExIS`cX+Ys4;u%(Bcl91NPCl zrh;L+LTky-wByZjZzrn#K+78;M>L_QYOq*~@_oKNme*>_Sc=(qSLnj1`w5LKy zICsxCDR-&u`BW1>oA4moin;I~Yw}(BKW=ve$YZqtF{vu+IL4T)pJddfYlWhd3fgp5 zlU}?!+WOauEe(U}FnSe;{KCb}9XZvg4kY0i3xh|Eaf@}UJzd)G6le9vy7xhO95~u! z<<&7Uoz!cv&IH(QBa`)U(Omx86C~xsp6$oCl>DBo+_D&}Mw#2+W}xx}gIji){_R1D zx7k@EczUjcWQe6av(EW^x`GzDuVgJYClha5^#3RYkD>eBs$RLzsv2GYAl|wcBaUWT zJRnW)LC>6i$Jb{>NoQ1XpS09Bb(6}?4!m0vyR^$_bA$|<R8Jx#a zb8R)7RLraQ3W1(whcrM7E+QqPuI)WouFOrj8a&aU72-16*EwPlvnfL_Wp5c>{quF` zmv;L2P&Q`BtK>h4e5-6LRR~H}Yb;ZAEqvEurY53;#xwNCzyG?yT-`*MYf;VEteBid zMbDyUTrDtB`IM@xa7n$ACo=yo{U zn7Ohmex)`&>6D_qEplZ1Xd%GB<5b~T|4*WD>J|+X?xuc|{mfq!9EDTDnG)0AUiOvf zDE|bMN~Y`=kEW=JpC?~1W!|^OPwCa&Si6K?mXkF*Xa-5dVGNEfd z2xDwvQf~o^%a=wSH!bt0< z%)HFpLO#-=2Px9IrMn|uv7Ncybu$!M=-iqF3ORv^M!K!86g1{EslTh#(s`o$QR@XV z$I;f;cPfg6+7cCUQAhr7%d^fefus*>4#A1!fudTo~@S<`R~!fX6lK8uN}X{b{8&^dSkI$9~%03yEk z4d_skFVSA;L_@J!GYfVy+|D+W6R+D(%5t$IQ>0S228hufK9LQ!Xw-JK6P`Ls-TBgg zfBalfv`65l%!r-PTf53&1@ge&b!Uqig=Q`%Yv;hl0?XVZiio+VA%_H#Pr+FH^DDe) zSf`wCg9SBlOH<)4$!C`FfDeH1hT~OTmPgj=-OJ_Mk`CiW$abZ%Gg6zPQQIjbXLk)+ z7Y9XM@yiu$Hi$-Z*pYO`umg;@X0XQsA?1{8!e}QdEm!<`Nrk?Tm;)bg#kNsq>FPFy zOTc14$dMn=@fa<#icrKY?e&R@4o48Y1eF63m%%0lPM#lenzr?5E;}_&Bf)--K*jV9 z)<22zqX7XkrCNM;0mXlCZ6sUi6QDP*ry?v35m+!Pmq-@AAaxTI#MqcJxK9~&nT>-w zB-b)$@}%tlE;{UA&MebXq3s%DYYS(CP0LXF*@HBydcES6g*3jl#WVMm>M-?PFENMN zL5G8%*I|i9|M9TMZq|2AqX9-C+nTngIL>;_>xi$%-S>Lh*(vmorN;ckpxh}v^n1Oi z43JYDc=$|wA|z;|E5d@&(TIOE`QrI@U;R^D>Qv9!t33Rauik(nUj4@jfS$&zWANt8 zh1R9YKTjV9|M8Ol+Q(x(^jn?lzRodBBv5+UqIxNdA10_WkBC}k+)@&J?NsO691Ut$ zj*Nvam>O?fih~e|zs9WeHKWmw3s2qRn?7$9pt}j4(3RUx!N=kF-MwUScN)!qys%OP zBM9-!`b@{?pO5GDe-*H*SO31}!;$~Z%Sc-qj?iw&A)_mEP$ea8WxfQ&;#pG5NdSO> zL8dw5EVTbdQNG_CT}Ws)$#Rj;<>O+)hg49rLO2@mPjmMP)TJGlbM*4x(Z=wa4C$E= zj$Qha$s;1f*%d@Y^*IV-ZxzH`I`1lEiO4Gnrj^xK@+9x14D3bUzV}N0KjM7;KWj_> z$C|*}(&;X1Wyz(R2OlJieCjnP?UuAXp7}?&9L$`_H+&?SaloMLy5>K1A8EAxh#UtY z-_?rnnBn-U`nCk7MPyEqavIgT?jnlfogKo10Q?PZ!O*oi96e~w7J}w1D_hbL3^2>j z^&9IsP$nX)xue2CJ^!+qA@$Hc|BcK~QRS*q6%^f71oC+uA}}=VLUG8Blhxgzj;%`R z97(l@4sqQv(3@4<;ZGH18dn9@Mas7CR=lzAx!6$a9H+NsqzLG`kY!8Xl!8!&x-Kut zlI{uA=(`*biaI+D@<;1`{0cKj?0&Exh=D~?``F|YcyPq&v&}t1l7UKr{!gD_-jB!T zh!0cIcNH}RE)L2M?Z1kbU9SPJ*G1SjzHz5gjb20QmDd?vt$EbFw_BbvcJ)U}h?#&jW zq*;vHc$BOyp97a;oi$sbV$RV`)9NKH4~B7gQ9g5PuJ^P-!@0uPddLkY>PO~Rj%Q9S42|p z8*gzj*cDFC8*hH(>gv?w5gM}kTtz5?qi)X;Q`ZrrBGt<~LP+)ZpB?dnm5;sZYw&qc z-5s}eCEK7!_DmP*pBq7(XAS+6i1W<|IRl__msrY=8Bu3#6xjJGOxNY*-Xpc#6RQYe z606A>9%kgP@YVq5yS}w#b=Y(Y2$zGAGB1h3Q91u8)At3(aZ0Dyd zj|q7wD6kVl;NiI(_pb9E4OK4)=;Az~hTeMywxwa~??)%384S+T+iqOJJ$J~$7xmHw zq)~@`v)j)gq8&Z^dK~*;v699UXLOzO7IP(EN-cm!<0BxQ#)MA2=BO>*pO@cJ>%#=> zHPGSvV95yf8#*X8@|sz5V4IH$2APPUj4RnWpPf*^$fWn~hP^IX@K&z>R>%U4=XWStRz9LuR@s*IsZW($f->CyzdlJPC~) z6`YUUcjP@!ZqPr`vGUa5nuFXN07(<8eBYw$7CE( zqSyTfhSe!p))N%Q`c)U+zder3i^|z`9FiMfu#x|fymfm zhm>M|)9et3c{afReF`{iB=8YE`@pc>Q#JoJ%koHX7vvv$kJrINe89>@G28W8cXxlO z9{yer=IOpU=(OqG`$LY3Jzwz!T~7LpqwNW;t?BIM4$^o&nQf_fSllK*Vu{~p!#Kub zs%OPH*(!bb%>zek%zk1dIS~+l^N)K9Mh138p-oslDZbbIYj;PKb&pwd%a~g)`}W7Y z6n505X}0)I-t#|IKHd+FkSIF)u!19L9rU!rK)Fn7fA0DRDIC%*=u8K`Rh%2N8B-HL zp}9T?>U>ftn^x=+bQswPB&_`GLEvlA|E;XZAm=t2t9Nn-D;bMuw z%)v{|;32Lmc)|YAm#wV_68EtWn{^c1_EaZIvbO96V2tD*?jLNqoSQ%DG8v&ij1YMq zYZ{u#!y|>49r<|s`FEjwIXTr6Dy-ETsCKt-6xGIn-=4wCMTzB_HZUU~`%J?MG5*WW z&N%&zKCk-Fg8{1NO?rlk9S4iV0?x<-wDdM4=V)A&V^Sg|Y8#ut&v|h3n}KaEpFQ2d z3cxJ5hAz^Y61lgo!j`?MRIomV*oa?&cuLG|2r*(JE|nB$iP3drFMkj_D-A9{i8q?& zSxV>BB9(^UoT0|&M9G|=nYm0tPxkshVwcSBtIr!xb#JZUc<$uo7Tij!5zkmk;%}xxz>5;NprZ zdd}2rFvIWmK`h-q0(|Eg4)&F4_ttCsvoj1_DM-fu@a9X<70{{8uXW=P3sO>fZSIVb zGn7+JsRP(ITda|C$<0BA?<_%v;ZCdA0JCgA1VGi#nu^~gWfDw<2e**Sh`~l28zFGZ zan>*SNmJ>Id`n9K;ma;j4OE6fNI`S&MM6d@;a=3o>X$Ao-I`w7dTI!Nl!XNv0gHI> zcl7Nr6pX4Tu&mF>fL3A@o}xAY>q1`gYWIbvY$l^%{+UA`mver3;1s%a2IyzAW}wTm zL5Wd5mIdJI0DIaSbJN8hIVWi^Ck!r+MVmVgJ?f|H)5@qENh|!>!JT-tWw_srEszb) zS23Z$2K?d%IdtahX0SkUvw_6E@IAGZn{~Q12cufN zmaZtus`0rM8*6Lu*t0x4U;8GxS`Ox}mUqYj|I1j63AESV_2knQ<5W{oeeTbJ#nB4V zJ&q`HQ>^RGf}EUzb7?*TZM{)kTpS;zIo`?;qmtuDTw)HzOeIU?Yn zVBzrsbmL$6M;j&ueDNFq}3s zzQdjM`iSA)%+U#>G)x^@OuS~0#G4%oGyL{)8=Sv>)|xc6q3`FJzTsL59degsi*z!$ z_4*(}1P`&^73CU;d8t=s^m0{ykh7^<)jFs1X&8wokm|9m<6W00$Bjq`i_k`F-7Ec@ z{E${uR8gEfDK4+DFsm@MDk4jnhYe;Cs+;~h$M2uiu)sUE$wP4w$|*2VT*4 zl?h`YW~+eSOd*`vP_}_T+Q*wRg;B3qS$nVYO>i^{-Qnz?zSgAo`vJy#``Fj^?4#Lx zqCC`8#$WfVIQ2CMNL2UQ*N&arEzE`H-BC9G(cGt;R>=p0F-JDgJlqrlN)&cDbF<2o zF^es_%Y2=uM(I8NlZXx5WX&{ixLAp|F}KJZKwH-3R}ambBwaFWKY=YJBNJ@kV>)>5 zY6@r2CUgz^wJ3)vX`Y|Sh!=WE8xUDDR$ax`RPJ>T^qwwbi0NkSaqb-Byn1OHxTG#H zg0tPt*A^W!3qS@nb7K~yfnz5ZAodQtK=qmkMSOCT)G5JsZ=U}RC02v)_Fbw@URqnf zaUx)pe(KQ;TB%<-@jzSHnmo^o$o$c_fH|g7Iw~&eol39O98s_s;wfQ_vCG zs(}taqZeO8f6QoX0TT{>V!mgNS|?gvGHuJZ|6Eae9xhgvXg%o7;A&xXA2I|o_u|xq zf?hmXXNPjR!NS9WA05K|H=G%21Ph-qp3OpI0NM&q5`f>qgVOgSER)upiG3bU2S&3# z+G}bNtm0*r+3Gi{Y3_=Z7)y{DxCM)mho<{If?W(Z%Fh{-bsbOjqwXvjp zeO79|ZGStffRaCAG`N%V3ck_4);bjV`5Dk@Ff60P-|M?#|BS0lPPi0bn1&G5e(IF` z@;cVJxcmMox&OjG&x@J)VRPoxMTm1UUatNRLFUdX&!!dTY}#)A#G);uE(rryrg%Zg zUG>&zf0Y^9HN4DA6wZqV^yK~9c~}1Gd*i%vbIe7 zgVk$cc-9?V;_qqJ>#?YC#B312UF>4Sr1WB2vo@L1#er<#5Yy`6Cy-k~6C995-6NPGLN|twG0X5fp4n z+>)?M)i3#wg8of?$TXi;Oz!M)p}D9sFQDs_z-t#FFmps(GXGOQlZHqr=OVpYJco5v#mRqWilsszOAJi3u1f#|driFxQyUfb!oWJsO;E z#A8a1Js^H=eJmu(7Q8GC0s)u8})yBVcaq%PQjjw>2g^ z%>W?TF890bQtS|e@6_?jGQBnD1VKfQxP)DydqT`w+_yXm zx0nUT++$`W{N8I0|6h-+;-Y~cn7ScAYPajgr^o3wC+~Ez+T|{LmJy?gqZJbt^)M1- zqIcJ;bMp@e2~_IG+1A*!#^_qAkU0tVZOD$=)}(}qrbRZ>>HGN|o6-`i+jW@t%F{3u zf2{`<}g(RTiRueIGK&Y zASoH$t^CW%kO|># zO$oKOPoJJ3ykqU5urId`S~(Ss;wRcA?QIuZ2XE|!&VE$8YY;ywjB ztcy~Pmn8qsMp zm{XY>s_A2EVL^$OX+h0yQ<_r(nx|pL{Zk0@0rPNY<9@FfNO((H4`1Hx@WurcGSQs5 zvpCZ`Z>NBAc_)8=C1I+%BZk1oy5xM15INzfRb_)gK!z(Q7+J<_Gv6i8;ta-HI{U~X zS0pb;sywh;N9s81x#)}p4}>zZ3U_{d?1d+O166IDJ2l|!J8>zl)f!md;^E16sgjIQ z;T+5Tf_^1U=EnJjV-J>GqHi^V$@Ro zwg$t$SQv!)LB}Md*>|l z^6t3`bHbi$27N7^?~TY7O55jkDGjyo)*Ph)`&tsJEDAZz8rp)dck;593g;XXUOd=X zF)Vt#T9gN%PqcqO&SwJw~M@HC@|Sl`n}cJ?Cz^xsm1$*3^>U8S~=0 z(6L)_z#RXyKkZ;97IbNiyZ6SmVvr=zY53+|M+$c@S^(mmcmR40tLeaoAwh295ya&f z@?nc!1R5-w{EJUJ%uCJHPP5~Url$OsMf^r@shKQ4*Cw&uExOnX1}6;oO{>UTVdw1t z9B#0P#|DQY7o7!d0tS>ihtS>l*9Ky{UIZ;Fmz3F@t#JIM*qlpaZKEN}-JjNLQhcfx zQtA7>dp4!3M$1TuuiUbOwGEpXwxSidyHgqx^6|Rl2{%miw7MOQMR7lRU<=BH2(5Aez!-C8uVj^==){ESMe0J?ft;O0of~g&Ayq z^n3;+8L)s?mSFDBZnm+tG3wvo#5RS8P~3S)`NxGx){~}>JI0lt0`EO3w+i7`i`2v> zGbtWO)`u$Awfp$c?9J#DPl9eYcdu+sYcXoL*;t9lLTfe5isBM&r=CkBwXFJVCtj1W zPafX%|5bk|HGysVHcbIe^L9YDF93L-h)Sq_b)pL&YGYv9KTjQj;;M=cyo4tVxe_KWHe+&!o2Gy-wjaGL zkCeW2Gl{5u>M@U?OQ=j_U~r@)N1(Mt)Z4)eN+|QY^?bB4dM6FB?U9;?GAchsf`X*8 z%9-v?qTFkrdqArr*)iuFw0Ldfn2*e&N1T*94|_b^OUG}4J6~`Ulkx44Wo6S~;7*zO7p^>gB; z;v@3krKY_7P<`dEQbU!CvT7~;U20U#^J|cVQsW3JGE}@!A3UzDf;vp3N8=e^xyUKQ zQyz`Mq~xmsxURL3UL(EeeX84`$)PGF9r9wkEiEFBq~Z9yED<~-F&81e0_a!u2U&eRp@zP7s?*l^T|+kt3ex3%*HG2;6J|mU z<%q?^H2$&IH<|MZGacF6qwH})G)yAO_nLenY3&nWaeDXg<%$28+bG26Xoy$ zKSl8TbH>Gaa6aO#%DZDxuR5`(ECeIn9FVA-HDM^>@MLDpJK0AZ#P%oA1IPq0q-6ib zflCdIqwleEt2Jc4pE`;6dw>1#HZSjY5q;a^*B^&xlpdw8U=lKjhJsR54!K#ScB0pJAh^bDBBh z7>6Q&>1L_h*e)5n!Rogn-JdwbyhDaF;$;sU_&>}9fhm;r@c%FDnn#rNo}tgc!l*S% z;0FoU#pB%CGx{}H4Xa!ue*ud+Qw~#@H0T&z!IL)(FV{X&*^~HEfIQ!|_X*iNaxHfS z8Zs?Ym|j=JhG7wd0FsIs$eW!1yT7KxrJg3RktUDbPP1OK?&70#N&M>Xq4y{-KAd>S z+}6r{V;Oo|$R7sQzroE`Z;{8)RADKk%bzi`QHKQ?{nVwt!HywURAGrgE4upJ4*QPX1yI-%+w#}0 zXXV#Z_;`sGlQ^7(s`#zku z!02I@SaoV#bE-@nuU<96;fIaxWzWnp6<)F3E233SM@Jj8^NC-Fr+0gMd(HFc9&L|# zj17~D^ZZJka|lNaEJi2OTGVD*(G3;3LI0KkVz@4$*u-RV=kRSU%P<4ToVeYq>)cjj z_c)}UV9@4YIz^2)86}EGgb$=}_j}z1lf(OXxLX_+%n;|a=Tb2Y`%t%`+sT&jN0F2r z0?=*0jeAuKe3}|uj8Ao8 z!duf4Q$i5v<^wAyYP$eb)LwQYwGUwwRhhj?-*Xsz*?1wRyfh{g>qmmZXnfE(D$6Ac zy6D;rptDtP-a&k~9CB6)9x$M{Xb{3!~f%N2h$bS6!!o?PUJ z`cRcW8sPN9wnNuQdBvC;E2PT5pGXBl2$>&^=H_%tB>DP$IZ2=u7jQ)0LYR`2rm7

_v^imDe*}^Eku-Zf#bxC!nHX zm3}v(aPpKA-?a5^gCIknOB^~-N5^c$K!McT6y@@=dzoc~?SC9o3XdJr8hh2dwapgQ z&GB5wf4Z{$(J|bYIZ#iELG2HpV{IO=&vBJCSuBL_5$a}n^k$p^>-v?i?w1Pf3S5_I;JZWP&fK1^czJPNWW457I}h5Z$Kvk^Pr@~x4{K`j z<|gQ5h>GJmYBO@;7_U9C%CeJ$<@dk=!jrEyft?DGbDil69Ddz1$sRG5&!Ri%<*}_8 ze_4u-Bb_i)iwbKK^(2-@4;@{gzy^UPEaTM&I4(VB-}G45Es${ZAt?E(+t@0Ps0*+z zllIDy(vyJ8vGigey2!EDcO%FnRz{asXjt0STTx)qpIU7Xul-l&h{Y_5<-f-=mUR*g zuSycpPcMFr4rHtI=FSP41RCk-C^AjU66V67y4|SL> zyIb3;WK9U8)xgPURnCY_K($67`?oxC!xobs_)?BiFKVx%-1#aMj#j;}5iEV&gNvKE zXn3{o(q+PKW!PswxK19XcmjbAGBpJA)M^v@g*Qv*-u$}KIFcZw{`vDu+5p~L|JjxMnTzwAI;mlr^&Y37nJq+V=@eC=l3z@hVfveWv`Ve((>O5K3$K$A3X0w30hsC(SxjQQ^lZ*>f=7djj5lg-vF9EQ0U24^&C} z#^2zML+cZiSs*}Gi$#|1N<$3njUYy~^V0?yt^Jy>3;FSK?6L! zjRqxrnX%O_fCtI*ADGXXK-^Z|hZ2Y8}|dCy6|EDzBV3AI?JW(8prWdb)?My-I- zwLU2D1m-g3AV+x$w?7-IcJn`&SMmzM-!SVi;3}dDe7-}krm4KR3VG3?42#lp;Qka z{-?m!KFk?Oaa^Dbx&Kg!}4b9Ka1SfP)+J)_(jDvE@ zF>fvD)~84I`cVv8%Hq!&48`iT_s+P;S#5Hy%w@fd&v>Q^_+(PWXdQ8?HNp*P2A{Ed z&Xi25f%`~yfI4Z;3#6c+qD~igy@@TvQT4|TZ(V4+hvQ~(b4*QpiWjUYxKV%Zc*C;krK4a z)>iLyg^#NCI7CW9^`1aqV3R$cF%3TJTfcUtP)_+!T5ZA0*UDU5+GjigW#be6$Te4- zxhgp$F~nd~JvqF=eedcSJ$Iz_JbvgjJ29G6=f?l#nxy^s!E&-eIen$fC`f026bDw~_Za9MH`@54UCh6Zu+{`a`uCdPpa2h## z1>;ZG%oD#+$VCj_4fuS!7kP~d`zx)xMnqQK)Wf2nKK#v@Avsyo>T^Z>b8ofp3Evgn z5{WjR(u~Qe0HT}vRwA=7<@bNAO*5;txHL$mi)S?$XBX5ZDR!qke%z0_ME9Ha+*#iT z-npysbbGkq^%(YE1o9nTyI%@;{jI?h(}W^Lr4G@cFR$)1Ets?LV@T?Vz(sl%F*dA1 zV-hMHj=v#fL4<6kF5L{G?8-PXn@Y~7J}yccV5E<7NMG@{&xzjQN3IX>4s12F6?kknbC2ED-~w+D$kFV-p}3g=rwUEbPh0}yeGKf&gJC` zA_k^K9^Ga3;Eko*+$p^1Eb&T|Kd^kR2p{ljOEs8VRBs7-pVT$~ClPj`zdi<;RgyLQ zEZ{9XL%HIc*+NHd{aQtR0mKG8`jSO`2`BB943);U10RmqjWtC-%O_ux(lCB53LpIy zm(;{ANYw$8t)7%B;b2DXADrA#wh!9KkpDFR(>>IAQ>{WGvJqoGYM^V(ywMi&c~>cE z?Ob#LEt@fIYT3Ov%dBbrY=_fpEO&^~R_Oh3+G^S{amjT&L}o&39ba5|P8%k)lSj!> z`BXxK3iKsUweh`ayWMB_o!hm03z54sl&w2^%wSibYu+KF-J8Oy(Fi7+lDPL%Q-Z-W zwl*uEM(p_|VL}DTmoOLmi7V6B+x_Za7q+(MS|2BD&)~i;RY$UIBNcDV=Ios}?@+D^ zY<8WSMRrW6IgQhib^GWLu1i<$65k0pU7a}BzqIrPtI2& z&g<8ll5^6qJ%19#Ii8$cUQWLVkVn0$7wuf9?)CWIy!HU)7MC={`h*J4jAYo(Xu<8$ z?q0Ij;ia0nji^7S?KfroOdV2$z3q)##bq)DnfAu1J!rXDmX7Z3wF+fqM5ozFA<#-v zMn;Au{^{vA24d9MgDHP!4LfoWkvqK_ulet&Ba-N;lC5;h?ga=MxYEnkl&k&FgWkWq z<+fjIetMf_9H7c)m~taX46_~dG@ye<#DOmhZeMQaJpme2-M7suC+-eIWL2;H{KY~d zRi5^yWtQdVK%$tV4UlGPS0v9>RP(3ThXIgt>5C=}=lUtshGaU8QXOC5BX=bL6et7% z#ICD6d(S+i^lhCXT(kIKw`||D5EhUo+*hxkSbKsuVh`b}yQ-=;C%6#*K~ETciDYdy zKcUlqR?O)&SFcz%keiuD$fy(oE1MB>5Mz#Ir?Z+$jc9kWOTRX6ycgjER`+bc;iuvA z0FcTD&h|FWaXg6%p>KhK0?J@63)zj*Nys1xmtVlZfW16_seE}YC5$wJX~)P(;uakVHUA#n_DRlYxYXkmt`4R zaitxuFWm;bn>q8$*RuEieC%fIC(HId=k~s{oFt<|*X_>E##RpZ*s7b(XOczjMjXjF z!Z6zWk7;FxVV;SseMoBz3B)=ld!y&v4&#g=sl9%!A-p{kC;4T6bVd+oP!Chv=iLUF z!tLswI0J6Gsz?PGGQD7n5do5>MUw^j=zlAFzQs1mC)IM;mJyZ}3ge4;jAyw?Nm`{f z5yEsrGv&WHg;zYc$3o^@CtSm{?F6m=B+{AoIL8JebcQYabNSQP!l%R=JYV4P32A82 zR4d0B=7@INj$p32?rd@Gu+^_MCah|XaLoNrC5dQQ$JBY}gBgT}y8+5r#2HEyGxkFI zL((4&F6>6T_b=<_6v{-DEc6Xr664|`v6I?7L9|!E7k?6^(Y87YfRw38(R+1NTf*Zn zd1~^C64|@#9W0VzK91fpac|DwAMxQmZxRM$alRW2_Eev3fn!lL*9!k50p{+y$v62FbCjOuxQ*Tt2g%t^C?s0J)EoFuhbeKBXF=nHe)B} zh1jB;4=haNUY|)ED~=obiCz^81BkZ%2we-@^css5n3$V`zMXfT3QPtnJ6v)K7dD=v znuZD-@dmSv$L5NE4>lGt)BJbDDbjWICT-4ol!~8SX}_5J8^4pYZhpOUZ$dN}8pvM2 za<|ML!KD9V4A2ANitv!9W65$kA)vui={G`Mf1yFcBJ8W*Xi#=8OPYWNog0FscdtzTg;k))e@Z&{3jKxA+8jt&|U&p7L5q|(Ayw|Dt*_eQ_l9>~aJ z^D)2diQHfZHugii{-Fv(4Z3>-`Ex>v|LAY|^TxQgW)ngFJoDqmRc`CQxKCM$@kaYe zqbJS!d%ukBA=xn_KQG13RDG0l7?yit zqP#r2U}~Wjs)Gb?#A&$Mem)TZDG_qey!AKjxgz8H$tSz%I4yFIaJ13a(@^zNG!6IsMi#m@Do1O$#pOTy4=?Fw@o>N;S96_qe2p+-uF#ra z$a!p{4gb7d(jwCIjA4zh%Y+f?vZ}A4LBc1Z2mE(ltf^=%Q!*siS2V2@08D|G%aCvsL`t zpp8I{jmrFOL0>I>Qz*QMLSuvKItKO*M`_Qcy(Fq_*sgSEso{l)U9W98p{*SUw$EVR z)cP-s2{kPJSHjVMdBajj`vy%|F1EmTt276&srpc}mjAGZ>6eFb>3b|`$lgm7E2{V; zmB(EB#&XIUJb-H-Qu2GY&~7S|gE#0Oc0$qreL3HQv}i(>`QMfFwKWc(IZfLM?B@*C z5=bMMg^fN!0al?KTd8om~)eI$--=_Ak%s|IByv{L|Jb6J9gKET1d% zkGfOf>anijQBHm)>gzzLR!n<9}wQp4yYe2tiUZQ8`FCM@bA0p zbqzu03`=Sb%y%an-@(YzwcKv-nfb1M_<^s1SRRXG>9SUisG;+s0@1$?dY-PqZ54J{hoT#BG=E zjie7#jBs<@z3VT{Z*3Kze!oqu7Fo*?`5YoEd?a=;c*)-cN+-!TruHa?=3VKaWDk*} zk5yKe`UE><)|a$l*TYEx6{dn8x0P?lTZzZ-u@wWolQ&HGRDA)vJt2p0XQ6Rq`%%-pi^vF(_Q!=*i@>e&2A{7Ei z^W9se@rX7M>sG2 zTR*#oJjKZjUiY>`AQxtzdkkgGQYwBrE3?QGc+?u1o2%hRSka_cs9J#FPsPN>f7j_5&=Z* z&d=4kdW6Z`3{$)iE097v=As2ny*IepP7T@|cRaae4edJNjHatI?vd59KTRE*9(#zG zY#ptOnO`hydfhgPSUS2xT!*`|$KfIDAr3n}g^xF}pvsNAGo1|;U30HJMwP&3fI2qe zQAHM!1ydYk?=Y?XdzXazw&v4iTMw=TI+;WU9^78`*ZrTfKY!SqNnW(FEa$3iR!i21 zQ7TT9^0h)-JeM2SCb~W_iDH!0E%>E^(F=%k9O{c&+;&re6&0+SPocNmUrBt(u5CvW zhY61ugawm;(ZmRBL!1^_&?)1V41?{vb!J@+kF;>A0_5^cynJp4-GQyEW?d!Tt76Om z(IOUcp%Lqp{^i-@FdU;!5yKW3$JZk;aa_yt!e(_r&eZL?zX+GZG%W^)An@~#sER8} z^wR0R9cJf397I;6wi94$s!~zRUHU=(qLd{475pc)@oh~<;}f{`uXCGl`k&qb7jq!W z`sDd3TUmfKcSpd7DddLdD6(NsHtXgi%|iXK)cuR&;VQ|1hzlPctW`1ETiTeNz$m|M z-i`duJ@*f;F5V^~$&w&-AN^48WA>NSeeeT8>h8cSRQ_A)F6y`|N;2SUkqj80QYaZS z6o}XHc&&M(LbRjV0xA-%^m5p0#@=y7-CgvnY)i~K-k_G}ZK2o86~xzvUKCq>qdF0$ zcTnNW`)?Kn801T-lRTjT1Nr=U~3iw*e3V2>SOJPSe?!QPzo{ zl$1QYo5OJzbnn!UFdrrwq1d5q~~0|0tSLFfeO@c(~^d+V?^w{BmQE()}z&{7H% zr)ZHtaS2k27c0fRxF)z;3&pKKv0%kDIKibwg1d*{E}>W`x^BA8TI>7vzWbcB&V9~( zHh=K&z$9I_#CS7SS(@;xa)V z<}m`Jkn;j`86Q{4=l+r&`iD^IA%PuKr`7jj{*j_Is0uLX&CP*Um;h*v<@wi;ac%@| zXLD-586x~(lZtWrMxsMRHZYQFdd~vaq*#-0zocf_pTSVknhU(2iE;-v;BgNXI%Fb; z;R!Dc6((B-w5t1CCPZ2k92=&52$tp|AdeNyAJ_B?r8N?m`4Eh>U)rdbvlzOoyz8(vi%X?7BOCN@$7eE;5#Ls`x+A31RV%0(#+9lr z_x7iS1Ip(f!{rRlV>?n02*7PffjfwIT0ZYL67pR&yq!7J z7qwUE?l!iVBPz%}cAcxdx8X_HU`nQDD2IXJ`RuUu>{}B$F!$Wte9!|XrJsiJk?;5r z3}IW2qHx0+O)B6>KeDe%qYk{q+ttObiG*g1+aatn`EvEZxT(Y`*?8?f_}ho7H} zj^UDlL$9R?3FdH zoXV^V>N9tounkReq;V<7reI@7<3Z$Und7VvhySw2Y;?a!R<=?`*EgrBYx)8?`Bj#{ zkOP@#h*>+&XPZm@H|LjvGoJaP9 z#NKausx3?ouQOgJ4G6HHH@kmXZJdCbWxR-66{p^OiX>QIeKwQ&OJW{!#Ag}l4F2iyw`Pp z^N;s=JhENOF7kdtDbs`|)y=6OS(WI}Ua41KJ9dB$yOJPN5Np*3%izxWlU6dq;HEDj z!X;%wAY3&C?36w>4zeb;(V6DH{HWwEydAW_P0<0c*6Is#t=68!&zLMYqEkRSgk3gMqIqX%ZJ+Kj5^f1(<07Juys zgT=W;zjg$%PeeDiyVY)mNux&>BAO9dybPYE1Qno$`%I z?(x!madH&kCancrCOKXJ2u@Zl&yZR6ObP#1tq&j;zjC#^_`E6dz@$5L&U4-9mE#=* zcGLOd+)T2XKK@XR2G0ZhLh96Q-f_KkyKAx5Bp4>dE(N`C4-Wj8yq|BY8@!;RF5+*H z&Fa`ZCSJeLBmuh5m80l=WAP#*!vJ@2Gj0$cF9Kvm+_34oUE4XQD8GUyv^U6}+kUnC z8P`u?Yq;)1cy$!F(($pTEz58MdSek0p(p@RTWzwi_EGf1e_SmkGaEP~)W3Y;)!>Bu z)`9AYtHO^XQxy|6i>sQCoMz@>!o9Yt?qei?VS{>&n47;2YR6%! zttby|d_*O*B)9JEFfL->bmJwS2hB3AMJ{Zk_eEJGYv1uzRI+akLz7Wyz6UE?Ie)yy z;7KKAa<2l*d%Ua$Km3pXlU8yqSs5&PEjn_2Ef*@0=R$#<^<{c$9cP_1qc?60%VVn@ z6h`Mo5L;eR-j;0^W2+=`5No2rTU$4ovIvxs?+JqYb8$Dx#_RWfzBy+>R^EBg-DI{) z$?GB^=xWAU6eGtE&D1xj{Shy_c3K@$1A+k$>zz)6dCr)o(v}mzuYL=I% zgRs+3J}`D{v#FG7!Yi7l;pV0o5IZ!bK*6dLTJ92-1Lxp#ReMQ&^&0~h7MalX!MT&T z4=9W1?hMN`(rn1 zq7fjfUpgn%54=4Ye(9Xh@kd!>bWT2FQTM$NdvH6Ul39h2CBkiTqx2|+zYI6*AF(R5 zCX32m<_mdOweA=+Z{xbdN&JuZ@Ciw=-rI4V0t%-CgGWw-p%k3b;$Zfyu2d+KSpnn zyo-QO45!ykXtvTQ;VD*}zww5)u#L#Rd?!SsPb;4s^~#5kG8u#cqvJS6zV04}afjk* z*tNf%6`);__>|PFfoeCD`V^dB9+K?N>j=M+*)pqi1nWbm$GnQ-oHoph5Qx)!oVAs>+}F;zu=8TlFG`&zu=9`b!cZFxvz!GS)BH_=SQFWYq7|wcStMU{smK z<3`4GF5V$>l`K3N;+u%csnX@QD!3Bk&*I4WFp^|5#C0JL6GvK9a|zQeT&eYleZchJ zJ`Up7_V7eSK4>4^(8<^=$AI+vne)o>zrZHb}>$MV3y*As&JoEc}4QOykB zwn0MWjcVM-NT*qBn_`~PvF6-w~bYxA;=U$r!u^x2&@~!{-{z~xnD`~BQaM$w$ zJC+ULezG2iF+P0OqIE+MG$$nu^pB#w;eaQ2c1<*{|6*_w8UB-wCc&O@md%pF7m}ag zm??c1fJ%{BF{*Ld&LXGgu;Jyrp6uo;!r>y8p~5iWelNOk@0Qi(`%;dfknZl$KK}vt zqJyR+w8gvv*#Sut>N(y+X>A?b|{%uT+$Gkp%|5!$+I71fyKCS%E>JX}u-`z`Dw>`nZiK#gA{vg{ z@lQ{rUA(J+2Mc7mtH!*~#aq8JoDimj2+SOg5b3!pc zM9vM^qU!wmNqlz^+FdZAw6eKYTlQm3?+vkgmdi@Zot4AB{B~gV16Jz{n(2K?j;_^F zl>)Qk@~$hnSo5m-t_IT@qVD{di;+CatGDM^ghN2A7mD367;s#lZ7+c27dXz3-vWpM z$F;^{#qJtBB|b14OD~l=I?JZN3D^IQGAuP-JFMOIJ>H-AvDp`(4N zgkvN^QZa3BG^Up4J!6&y7)LaRCw%~Vm-4M2pElveKUCd74&KE>d7J=GAv@V5nA(wI z+?rs+AGM=)+Wr@QnA*{~_+3N*rgYRL&SJl;heC$k(a8CKt*DK8)VUqg+lp!=8^#@0 zQF^kb3F8h6Xa0YU^t3v474EI1vK@YhG_&{S23&_i&AhPwCQqPThFtHa{~CH#kkFNv%JRbHH1p zxJpBzw@*J}qozyT+78>s%4`*k0LwGDECe+g0lJ!K`VAPWchLpQD3@Ftf4LZSNbJ>$rHI~hK3C7VJghEc-?~lp8 zUA+!4IvHfmA19UjVhU<_jD^rFvg$ZylGF;dPv& z)5mULVz)nqGO;Zel6sLXVi&TT7e`BJs^fQcf$6RTMMI2zy>^N==B;f=y=7Sx{ev*X ze*L1C!|4YfPR0!SGq(?I99gsz16MG!{DOuxvU{ZlXgpBApj!X=IfJ9OcZd`^?{}=gShxyjc~Cc!Y3^$0qWU$!VVC^Te8TMm z32HH^=U49nzR9f>l4(n>qT=^&POs;llh&U-3_ZZ$%W!C8GXK6_Wa-x<4+VGsOMm;% zk@}Z^zqa8t`RL+vyM9nI6@nYuuCr5Up9q_`Rec>_!u>l|?oo?e5?@B6y)Y??V)F^j z%)eboTuf|e^IPF$?@`3L>EziyOu_9(Y%Z*Lh!Z1dml5g={7vsZ&JeCyAvG7qAc|Ds z6UO_oJPx(WzRP+;ny?j;QJ5A4t{*nVdVEBTK47?~UCQrsrAhlR4{74^^N%P2yU93|+g7(Phu` zU?O3ul=G4{DDwq8;Lbz7;PJyTH-J(yJ90vgp9Zy=te~bTM%|R@CHh){(<#Z3x=})Y z-M0^I@vjx|_rh{=bEWz7lK38Pn}}l?GQ@YViOlAAgoeHtu{+2tM}Ks+7^{5z3i#;x zEcLmQ_laFyxiISw?675w3u3gdP!E@k{5^-y>)Q(l&5r^a2s<4M{@2%$wh)uF%e0+= zf7wMFI)%tKmIvy$tUkHF5PMIE*VO&oCv^1b16^~7+z?+3hMa3~-hdHjc2*F#uv2~8 z>pz+GL+$6bH-4;xmBzxOgKCWF<@v5hT%T{vjK zgO0SpXMR~U1`)H1TbzLtE})SN$HE0 ztW)b<6^V%@lE0T~mB4O!FL-PL7P~BD^Fe<^tMuyC+h5UI=0JHW2>LN~3jL|dK7Fp* zm!M|Hr6$xiNsGD7oxjJ6I*cOgJGI9>|62zAwzHIHD77o~Y@qrf|LE&|ui8;HSpIjR z(vtPW^wpzBmLZa>@+$DgD9{0z1EF8+?ONVsP1QXCdJJyTLfltJ z7v(Iga{c=oryJaSBzieNFB`rxJbI|o=n9L9kR7d? zbX&taR9l(D)=bEZDuw`t2v_C8(Kesk!p){!CoAS|nHas`%&^{Z_oKqnMJdXU*q-z9 z0G5X5N?^k$(?-9@foFl$O|ark-CbLdrLKk7iA&~gpn>Z6o3+dEZuHkbc5tohKR?Xa z`y1YiI~Vk!B`x~+fS}ixt{q3*#F4p;$Q3{I_RI-Rh5Z>z+Xz%O5CDQ;vU`xy7 zLWch~`$K{pKnUYNGLL1J!I0uZM%-HuW*G6GdHGX2`^YwewFe=_ts&>zCGF2zD8FHw zCgZx^{7Ve_`-{}yv3$~fA)|tfnH>cE1x-7h1$N~iqBb?&r`;P<^po!3 zVAP4)eI9D5+`Ljw3|I5jZdk`Tjf1aw)?63pN?T%5g{uzl*E4ymWCa{r01{dvFlK(b z!%?PO*E(@*KB+hG_XzL5KU$5SOWDm1Ar<*F#QkUg^I@ug#(d`g(Wt3^LJ-#ed&>~} zYl|t2zNCcxw7pdQAInX`X?~CaYWL7H=I!o7A0r$36`QuCdp5_Lvfrgif^#En8|qD1 zQ3nt~2|g`q#nZVs*RA3&6fWupd+W(S5R)5;vY4<#UYqioul;*Y#_&{zSK?z-DxIIT zH&ad#S=-an&aHei-f2vuUGH7TX6e6(eG1guRAf(CX`p$3bsJw1*=nQ!K~_DiQJ3Y8 zH*cVJoxx}7(#_Aej$0=6JmUEpj!iQy)}km@H0w9KAuhNLMy!IzD0 zMPnt2ZWU9FKQIu7K%$TI0qXqc`WrqwvlrXNh;~vQ;mFyYbe|sV4>le(DtobSlMf7w z1G}y3)J;8^vOLQg>MA^USab2_;@=7otH>_oJ1%6PvE6Fx+Ge1aSC+}ohTOada6)wT zg<)@3M#B&c9;@g+j&UV8rnU40yGr6scI#g=TXfVeg|US(R#*|O&__xzE6bGq{kOuu zo(r!3?SoWbs~zm`Mt;138UBuSdzpKtE_IT@2w~-UAioQ!dqgDZobU01F(J&!WNF^4 z1x<*ZOh$^jgWzTQPC%K*Erju#P&OncCOb2t$LwDyQV(nzs2&>vc~QD9t)KMv7rOJ8 z2pZ-abcksO<1-^-UE#Z0J)7r5P+n}~l8?2or1l#=TKrgVvFkUCu(9Pyqi@L5HA}k) z8;oiiVe0AYMNYsozCBarY_*(eqZ}u{qW_T<{}q8_e??XJ|Is`f?ETM~b$SW^MfCos zuzUp-v$k^qL{(b3x&P5**O!9mnPQskDUWsxe>K@ZWfA);6J8)^-tX^W$|Rm(v)qec zWs)D%j$NENm@>(h{rR|NG^R|ls2qKDg;nbT;92_LZq1LyxJ(+q+Rsx@TK<9zBv()Q z#{Gf};E~=d5yU_S5O-n9Fl)yJVtB*%ow}2}`OE77om$Itmx;)w7uD?4Zrl*WyWxG; z(Mh@f7rPXc&E{s`W(C{2^W1O$n%b%0LT@f8#V>O8WmYfr4-ro5hkuH20{xN1s0mu2LFB zhvGHxIc%=QBqOc}>-D*>#b=_Y^qJZ;$40vqb>G^2%?>P(eD=tNE=stnYIw==&Ribh z-f!keA|2Em$?%TJP?lA_=G1@~p#9h(b~{eE3-+8PVo~zz{(Y?d-^$xat-YBiqLC!3 z8}~Dq5@V093fJM*b;*B6+Zl1>f#e_Ooxh^<&7Ye`U(tU#Eb~8ZG5;N-YBP<;ICX96 zMQR@PvsRovybBSw>86T7jbc;nP<75WWXd!<(fFW;-A+l8nsy^WJxOnDn-mQ1{^%c{ zfitKK+kHHy3nZO+p6~3fl3L0dPNE;c2VW7$a$&*a4o-<&8Cv`#t&g+vuVyKkiAkjq zMnpp_rc;v10;JdgCl)w7jmJpfpcLrtY*qjT<&*Uyo^7^mx}IvPptf1J2M?^q4w7qJ zPWJ_F@+~b~{jGpr9XUs|pF9S#CVbgOuc;ws3TEBJTHCdQh=R$kp;mz!an3`^p%Wzm z6ZJ5Q^Jc2-RW&Bq3V=7LV;1PSKzQXdb+GG4Hjm#%@;er}m}<_Iq{sL6HI5Oi9l~EH zppgr;<-!c#XIZa-W_$W2_|)XEYp6ka?YoyU05Mc%=5}8S;kEIOTCd9ON!#yObsi+t z#@z{xx$537<4Wlv4I(8#hJ&f{yY{12g>h{Iew{JDV@cvQZFpzNpaTzs1A0`|x7$Vy ze^mVJTc&>g>pY#Q;mNvXjLR~*To2sNec@;+`89R(>G*c%diQb9!aXb>6+8B|eavB+ zuK|7RsD+!cC88O6Z)2>jp$=a)=-C88A#;yKS)R-FD;;=*M<2F37I=*^q$?WD_`;$1 z)YzKyr}nk^nRw&@&eDV5v7$2Xj8kW|WumgBTcTsJ!@Uk5*NQ_fNeZ{S@ck+f$YWDi#Zo7@+Lda$0qBdacuG z^rXznYTI6ucXx%#fA@<{mtE<}{ns_~QhGkw5)#8tc#9rFzI7(k_WA!3X>(tsesyww z!}^~mB6On_?~FX=E&fm}dCm|3Y!X+O(rRbd$mfiD{=6phs3jobV(1slNWpX*D&NP0 zUM97tKN6S!S&#}VeAgrr-<#_iD^A$~45>mq;*srieg!Ng9l9**rs|nE2RmM!m_TA-1@OIoi4r;elA_HfpL*AARSzlB_VGJ&xF_&h`0}FbjhuWhr(?k zwh*>d>pj->z#P0LR@21bihoNg&$x07b!^(A?QU*GI|-^5xb0)KY5U1&h<>^q%-UNN z+R*jh1Io|T#=d`QRFAby&FR^=H8Re|oh?a)XGuNfzuY5au0ph)De^L5UXqP#9%?vpXn5{V^m07^I~{KdSezQelvxR;IKm3G42ts%!}A%dU|Lp zrdLc>{s7`#K+akiW63{k;tD3bGXxX@i!BG|dk%n;5Qty+7+LhdC+{Z(j1@`E0MpN_tq1q_sgXaC#^tc+d?Xhj_ z>?kks=u%zJePa0{H70a?*Vfis#Iu-{F6JJcnOVe(d5WHw1VMUu@3APc$f}5Z4|x5m zSN^T8A^l2bFUgaRfOoLBbCJQu=L529AEWM|`q`-KZ%!+Q-6|Q<)DH)s4K+iyB=1Gf zl-j$w(a{X2R`^>pGg6zXYh_cn%suaF7?(#oEs6$Xfa20KnhMuFYMjP z@23u^@s85dBdhAD2V>vHx88eGg-Y z8fwUE6Onsj@IAGl$x_7lWgL+o;lW?;9;2Jm#$YbYscQkpp6_&Pm{7w5`ZIJVmMt7C zIoK_hl*E!UR=QMmnHUq_zN>EDKbut4bvC#a(0^ikI~aMJLsLIKa?k19;vnu#=sAyZ)*Z zkR5t{%vtkMQ&T0efZn598)aXsF=%Nv#jzR|IY%x3_lyQ9yT-<-S5Ns2WYrWVebqNZ zd6+$$?!8@tZMQ`7-iyDdkbf#)Jgk5{)6PC+o^@MfPt8> z+(-4tMO*mIy)|tub>U!Mv}uVY!vr_C#21fyVU2Q)|M_$I>&O$vUnpsOdGb3}r^IDG zlvHt>{dX**fS*>sV`u;f~3k461g4LjpkR-4o}cuSq$X3Wh9!v)P{%DIqgr z@$svxQm+mgwKUzhp*cmlAf?Go&#cD~Jg0c^S24i0{b1!x73WIRjNdSlCl(_NwXdr0XjUOrPzFz0QWGRzorJKyUjTG|D2 zdycL-zYi!gOMNl-;;Z9NC*?0ZaBwP2P!JRRS38}R^oHMG=UPhQ# zrJOilJ>V|LvC671qei07;Op{Z)95?pi}gj7+1h=d4@`Vbv{4Amq6HM3_~sN>8?d3Y z5T$H7m-Ak>h79>snQ#HwhBup^(alb&}MOMrQ`8j(~AgtP&I@9fNhul4AiS#&Y5nZ!q70F-$@A7 z;Ii5Mq8Melyr=mJWXBSXiply$LYwn^wEtl`a<;}YsO@@Su@uREl>TPVqz_7}pLjb! zu&d|_V;ksJOk=cn!KTmmF`B&)9&#B_{fuba4WJ>mjk)@~PLNqK?)(O0E)Gk^q-r0l zL!QB@zlrmnFJwKR^;mp)Kv3C9ou3qy%TU`iXIcPfN{YxK?K70b8;r3MVW??tM#KiS z=2lU|(%x+7kVEKA!&6(&2T%85vztrxGp?p1#fjuhMu1dUH#nkcr7#&d60s>f5~8J` z(9cX`ydD{|PSm)%xYl;vV)m9_rcm`T)#Ydo>a~{pVQh44=;`UB_=qiq=HizGdu<5cwn9zRN-?fS1v9)-g_qF1q+H8+BH9>PtUbjOSRS;R{ z!32$?3nzUXCL>|M5>wl>nz!_qglBYl_QXTP4fnCr(bX6Z(48)#hNaID)3yRI#DQ@4 zxL%a3tj%EjgPIEwM~6F=JYPd%X|Hv{@*Gam+PA3_Q*qPB1WNi09eW+LDI#&EtM?QE zhEg=EmtmVxU2B~!_U5RE*rr1Djo4-v`UL_Mdsn2gE{hk`b(Xi*g#MF zB~yX8Uf?_nat^>+!Ie^SqO49$88C1bpe0#nrClLZ1g+?C%denB62C@G`<)N%T!W0=l)0+Elrnch7!$cz)! zN6H}9+7;3?0qJW$v zxSklQpBSleYmdkt=eTTZ2Q=?wa@x>mM!sk_IMn2icA8IFC?E*QNUQB*h=ds2?ne=| zvk38f>hPcQv@Ze9fqt!ZT6WPt=i8a2q8F4f?FUroIMTSP&sS0EL1=%%ZY85Mn-! z(BE5f!cdUIlbyu^|%jHVXf!IvXQPT!DuDK%)TMxn3 zyQkn%v4(}}-Sk|JoJO^G>m;Y#>eWk(s?kR&or*L&i#uhF0q10{&^lv(627=8feT7uWZtL-0z9>COMJT&)mb=U8>OYjb+;>S&A3R$n9a(`eBt zQ(KvdfXH4ls(x8uWo5IlcO1SD{ITc}&$Ede9Rwp}Qg{jC?Q@ingM%(w#Z)L|FK%e2 z)NBb$?B6-l6Kk&S>&yTheZ|ms@~&po6|?Jg4w72vYee~lWHMoFO?JBVxKpj42Ua^( z0oq|wIc7n=xrEQZlKD&@8p|Ek8Eb1DffD^j>O7I>=OE-QXuo-RPi4;^2)jD>UAT4- zntWI)&_EoY_+yNi%MWXSncLC(kxq9J- zo!Bq)$|D9ro%5iWU^9u8i5srQ74YzUbxW4A8DsyTvb){&awTHgd`fm@$Bdy>!DDUt z#}8r2heou+qV2th1NFlQFe0UmHvgg=cUO^6u;@oUQBDcZH&AhnfL>AYzyMNdKI^Fu zWy6Oxaz{#nD{wA8rQA(Jc?wdwz8kHA(JvRAuB-QEW-#yOUp{DY)en$ev_W{tK}m!s zpFzcBhL@}|OQ?=V_o$vu$oGt>u;sjjWe?+h3ce1Cl*9s6vdNhY@!GlDT*MY>pzo;Z z+dvK^4eedaf~<{t6dy)^iO2Vq6%wTmTdEXGM(G#mGTWFzYmE4R(-K;Lxd=++LvPP9 z-F@5`8<9?c_OgShhAk^>EKnyK3q%?^>pEy&hNt;!mp9I`z**O`>mR(>VJ!gm(V4`n zyledSDPGDQyx`8n+TE|69L1qmJm)v2iS8CinIozJ9di4%1+sNQ_-#|RHnU_8SNC2X z*t9Iv?18DBTTHakMyz{`W=D`>Mn0EUqnHw}oLHAU6+X=IA!?$*pp|RNK0y$ohZu5a zl_Ft$qUcgpsljt#=OT%=uupS7+(Z%3%5m}cRqo)b%EhmFVa|GQ>B^tw17t{=Vqym8 zkNsBgiY@5kEq66NxfFRzCuQntw5aOU-?_+P%Oj_7}p#mf@av-0+Y zBSiLt0)e%em;FJ@hf<1GYHkfRhvqhVkFKd|dYdo=MSVun=|Rhk5V4P|x5vS$casEl z$?sTXyCDVVo;|y^Y)-;}RGD$0y%t2InAW{MJYD}`4a!%LP%`_#n#wB%HG7bw2@19; za0-Or;}pI#Nh5~!`_U|^TiWenFoN`1vj`Cf017~-X6fF4Sx z`>i|Cu(QhzJ8mHtZM0g=<>{-iNFDeeS*_`9gTxp7N2f1uZ)MW8V)lYAURC~%CH3fV zUANmO3pb$2QOvl<&_DJD68knR(tGf)R2bA2E)kzraVaHnRmam62|87{{(=k`C&vhC z6(=)w8l#GDcJ+{eE56H>uVX}>Ye_^zI37usbHmg&8E4aJ0K@U4IJjkxNr)FYaZZ{8 z!I_F9qi}YO*tZ~43M`a|Q6$==_?cT$VEmbC^un=d;0Zy&=sfd?s{F81BP!k>?1MHl z`<%%#KljyM6>Ou&%SX|i+3ofv&5R_$)iEGN8`9*p8l zXzL(+?vZK)k^EvJFsQR=l?|;{kkbS=ej`@g+1-Kt*!Y2LHUK`xAYWDm&r4g}V+)$- zi^5xaYP*!7)~!wSR{jHrus%&_kY|g_!P1R`)Ju@b0B_Kj)oHdtfx|dG>+CYv%&0Oq zOd}jW?YkDr+$?4D{0`i4GjpI*&24xsdXr~`bfAsWx)g@UhC+*bG26P!5EtjmSJRJu z(;9ukXNBAP)Y%N|Gy~`sUzCevNHUF=<936f`IS7(W1B#ODM>dA%`z=@t+2=zVWIoaw$~j5_oc#S59(W4yLz2YG}Tm~Fuy&c z$%E8MBoIW=%mSJI(yb$M!fWRbM0<<*B5v*>E(7C(9(A9o9GbX#Mqhp$D&^bvtK)dxSd#F!DC}8I&UF=p zlht@sD$HI_MD$w0ud}4UuW3sk%zNJ^FZ{@ppD0|<+#_W9;m0AyTHt#HO||IHITO;- zs`IU@mh{YQ5gt7VBmM$}yB-&@t9B42)UTCy0*vy@p!ot6+vQw~HBTi;nsV$cR$+PS zAE)Y3k|dH=wn@aknoj_f#d`j6WTW{CRPVNQUA&bF*0qP%?oOCR#P5W^-JnVHVoi?7PZfNd}Tc*(#R4Y8n#dUU7S7gol?A{rd45sn{ZFLBh+`E)Lxs`0Yj21Jl#Aw>wybQ~A`JP3W?5Nw;%-I&S z8gO{{B-%iHK-IR|y&dO{1Wxub?+G{o*e=a2;i%oisYGGin+mpw|!fq39ERSdGjd24KE+BjCP^aVG^G*W5zYN~(lE&F~!0V}ySZ{ClF z@DxcadSU0eMRcqOCB>KycW$`I!w-EIHExZDdDgl1PLm3{PX}EX%nW;Q`G)1K2`L2~ z{CBiCU$drmro^_}*%>(~Yi-WK#_R@_9AJooGD>Bb!_IcrdaQC;ywBma}N1^HMLUzEwRMv(z9Z-yKTGSKfmM2xS zyO{rGLorQ8*1JPpqdy15S?ABK(Zf3D@IBBK{th#mi6}rE@-2dRd5P>~a%R#F=LB1y z)dch1#ALZIt;f^TPjLs+OsZnsaGC!|zjt5%dtuIaz`rflz~A=A?X~yPuY%kY)W7PK zPlgz8H7iF>Ly)&86qn|0mjAKHwy_{_Q;2tNb>cE_clPD-le7W$8+v-e%q>oJ>f4D6 z0if|Z4GA;qGE|;TM@oO$lg@|Hd1EBG8T5ty&QKj5Uv}QeF6$8{snP2zF)eVhieKA? zKKilY()r0`cy)%<3CO=B^tqs(9W1H-d7gcnhje`2hWs5Ox?!wZRfWq=TCSVri$6J` zSepkRHa`6QyjA?Ne{2lm#M?VvAo}D|tR!cWT4OeEU7ESHd$y|Fefg))KDNR+G>Jfm z=p(nrM1?i14~edzghJ0jKq#n6(73>QG7WQRh%H=dqzuxodyw_4W;cJe+ccK2MPpoW zjNZ3kML|KG-7LhTuRY|XB`*0TpFMS@6MIXol}K>hE{#Go0ss>M(y%)h29`7xy}7V8 ziNBZc>cn4ur&=(f&nNaVHEp$DP6J;PrCZFL-FJ50PW4Z^d#0rYb!m(Buq0B*|jr2;G88LhiB6tMcWWt-tzAmQp)^f zn;DuL!vS>X@_o|&)?LPw^I+{H4BU0)S{iPmz^==_`_rb%T0}EgdrcJ>IJ2fA`WH~w?sDT~KlT$l;%DuTWL9=4MKTt}uSXtTFKv2UECK6%TvyjC9nTy{ zl;mWzAa%AoVOtpG!v5`u%HjgV)%pBe+&wL*OqlUW)4n=I1Txfs4UlYWIjORtQe{>@9Nee*4!LxFC5!DZE)Ugv-@mVxhGCwTE~Ck&VA8g)hL3o#%|9RpN$Hl zn}3T8ePW>Jf$c_?Gf8o6r_I|UFor__=kEn;!PLfEH$^OQ^@<12csw|XUgA9-Ra|&w zeI94Ns)w0sx9;+Q|2Wm@Kd(+iB~AiTtA0(je?8skF8g1MoYOMA3Olgu}ib3Uo;nu_YDV-OryX+S2svNJIa)Cw;y)$Bo;gc4&l?W{a03Er>s^;!SVE=BQrfYKOvuM=;p^svu&cO$)c1JJwFAJ^% zFN2t~_&RGY^=0M{WRw+s%+Ub~dC+*=q-uA$)w&}gJR#6fCz$RKww2~JaSf?Hi{3~Y z?9a@+vB*wB>Z+;P9hp>ws1xTcGWU+$U&tW@57RkR-DNaef02`t!`fEXHMr=$d(dKg zGSy^iIW|NIqWH;8WQWN)&}XiNVPTD%k1=Wv|JJzxe60#FpzX&Ay?hoBK)?Hw{N_Ne zq@u5S%(xa_qT5YGR^1f$H_QRIW{3AexZ!s!<)NFd2YVWY3R!(a@Jp}*icVYabcpDR zkgWJ9>rwj|r_1@)ap)5i7+R+#(lc*m5G)!JT_^LMSdh3wBGz9NwgkQcms|(tRA&iQ zl(fDZAJQhxm{iby2oCsgaTn1F70c+z=l}-QA7}+HX0B-4Li1`DaB%D=kL8p#OrQLG zlJt2_h-P@z9Y_NQebK8|wMDs|7;=)|ODZXR<}U{9rgIRcL8%nY0!9$rEbio+0(gZgp^LYvqW~3{inru3)hiBw$PdevVl%&Q{Hw+On z7(+&fi2JU41Xv%_%2T5asq{MI7pg?H4$LbNC172gT_27(&qKZgUsLy=L!OjBeY$2c zyMCAc`>nftaJE7nW5FKIwY7=J7M z6>hDf$gf*zw0lUyH@VhTeDrB8D9rIrCw!rSAlzYy65VJ>UM^r7*$u3RD+Ap}WGB}>O;*JI zf+1cg|6`1c?VTsWa8Gp9#f6v;cX}aTMU~$1b>Nb1Zmp^{WJ8}=R8=9k>m(R@_XzRr z0&%{vQMsQh(hjcMx)2Zx)+;RXn};;OwznBPD0~d6oQupW5SHN-3 zGKD66>n;x~BqrrA2@j8y;pXefle0O`u`<^rYD$!fH;07AuQgc8dDiLDRT~{s@+-ZZ z=;O+NCwo~S&cKkduh8s{_Z}G;nu7GHF8{g<60{FGworN5uLOopI=|J{lt%=A8~eES z%=3z4HhvmK-CKLXc`HWOmmy^e-{XHeWZqL+w7bpP4TVBv)!)p>QH}r1oPFr*)g7ph!JG}*wXz^HQcOn)GZshp4!6=2%ET9ec& z7@lT~8boC&$yDr|+kO3ANby=S6u1C0~=S*7yttzsC0(eWw^-GJos^bUATHwR2w7a8oAb88cK#0%Ves z5Dbg(7K&tX7Tlj{@f6bzo1l`0r;ng3~ zqXb{%>NO(C()M?!nz(=kNSaJ96LS{nO%}Z008j&Ur3nf|K<)R`=~AtX8YOMdD>Y(T zOZN$)4b>vANx`cPSa~5?!@IeobE84@tR;YxUX_qcsQ(oZ-kw~$xGad=ueBx3=An9X zm7r^{Ht*aY;jJYp$5BuaH}QRk!Dr#nV)f4Nb58#^-OF@X2^hhlvn#H>u5M9ixN7yGfE_EtU&*O45w)<#y)6K2A#~ zZ$cZ5Q^Q%@`!IH;cJcgrcEwiF`dc3xlL1HN;bB3rpm`-EC30i*d45bOCnR`DV{XLuN@G75>zMhH~?bXv&+plDHa)+|b=KXmXF4 zm09rnR{F4jx{8jA(=m;Gqe9vdvR&je?|YP z5z!0)J(I<~Uk}GYty++Z!1XLwmrjUR>A<#XSmyT>&v?E$Rlz1h6Eh0k84J>}QqA3a zoh2ylK87b-vs24Zh*kD3 zW$5T|zTu$6%IJZsZDnbf{~~cRF3RD@Ri9lWsS1YE%lKqBleC`%myATUSX)XPKA!v} zxK`&Ega={FI2=4xXJT5M-u#ERwjs^j!jS%m^7DBpv6+Wc#!bUTSm;Xi)8mG$d$ zd9zDGVxHR{3hrtBdh2j<-b;WtV_GNrofm)RsY`5BEG+5#18!bW#`;#YC!$$6 z{W^xf(+6f}`{@Heq4zj{5i zXE||Fhc2$BU*g4W(YQu~Vy)o;HK7ZI z=-&JZ7Xwapw>M5Tle+!S8p(eWe2I=(#7>oS(~zWNgch1GlgHJYqcHVnaq@dN*_tF7w@BOAJ<&ey zblSc=Jkt=UTLIYHNK4gX>h5|Lc^AjMBm=1iNz0};RS8>P3m%tgz8AQYdVRi=uHo}M z(TWo~24k_LrEoFCY#1EHL|_ecus?FL^1D4_6%FC z(NS!Kk8u{>y-JdCxyCb8`R5yyvC9CFx;$A5BTZ0Tf~rHJ0r$CFdn1nu-h=*suK;N4t@>Q#meTo;^b^uMvUSW^OYv zjaU46v8bn)&6dId@c;`nd1W_tvt!CP$JD-2d+cp#Z?9|T>6~3Hs$4zNdTgM6M?=Rx z(v*^l%D0T#!?uVXxH&ZyZA?3dj*$uZP%A+xZ@IqX=sr?mEMkY8+J3jPW8L`;Y&m^K zA5LyLI>pqe3a<@OE#ipmwCC3-g2ecpEOC0`!S3|8fBEEC#7HbsO{D7G2!4jdC#2KL zjq?pSzX|8uE6n>zU`2)KczSX6n|l`gQyure?g?wZ_rqDV(?ZKNUBg#r>y;|7@s}g1 z{4xmYZ__t-zHt3NGDCVa&-lm`>;L09F6;IHX`Z=61`5)}@LN5~cu!9_M!ODAzEm@u zu6^kz!QZC4MO5}#X4!Q4dLN;(b(S_4L9=5GOhgDnx{&btlyZM-Oejj!gD{yBQ-M#& z5Y9lV0;yccJ?r}vrGcj_XSEl4>=6-RO8a3Xc} zC{Ty4TvT@=_>Mc>z}v>O(u5Z=9@mWTV+O?wc4-5f<;{ix!}lW&*>#lH!{hX>S`xl{ z8WY9ggqa{^wD+J3BbgO)$gX@)-HLpx#&12%!fboSGLxo|w|6)X6iNVM8$QSW1N)Dq z{o5$P^#5gt>HpWpFMJzBowXl|G}`X%geb=ELTo!Rjt09 zv=QHbLB|RGlIS8QTW2m5d~uuW31PKuFXgQ?vB|DDiH+#!(|t%T4P1{3{fo~=vd~)| z8hOGw5qixfd~;3T7b8yf9&>bl?PAHZ2$&<1Cy-+5Q1JER;r+rOJqlM2@$UrZ&jly- zr>4-SA>^2H>Xz|B5ettziUcoYYI!_-ghDCb6So;35pu|dFWFhyae5A$(@+PhZ^9b2 zaF2KN0b9E~~= zrOe#4IkH%cWs3UomyE?zAZokR^SGVyyt{MGEvJ#}>Pj6oF7@=0Tu#%ITHnKM`jcD+ zFY#aBcRDe!+zx8?+UjUB_mjW#WV?qe%NNwy`1IPeN`is-*>SYb8?yRzKT2J|?Efzn z6N$|KZ0}O<;jo4ujlZnX(qvv5pOMhtqi?*e#`w7WwYu0huT5sB%|`EHx)QM$I$UtJ zB3`0`xZKf;V0goqzE8jlSEo}-N}nOQg|-;MrRsk6(7F3A#Qc#;RBE0ORtNs2gRIr~ zpwlVhobvMhVWqnf>bj}p0(j@`EC#tR^;NTcmq!$0D@0Zy= z;EaOzX&*C~MS(uNe=j;s^ey`Fnuk>FfSc1Ppmx?fh|2Z7e8dt=<010xRKJa>k3I8L z87<xR(#%8cKH(}rE?%JmDNNm^GZ01V^`+8`_y)*aM4eK!`p?{6VwbJ z@S62Ij|cBEpLdqwNUgTWw$=3Y466_~TqOAU9k}4KG~l@_l;Huy5i+d_`qe_0Fviz4 zud?cA$e!_Xp0XI&^{g`QUeE2aRoB>@S}^t!=f2wupM>K=pYZ9@XF)mn>T8h0;xVr9 z1=>hkXIejzG~&r`fX#QHiO%?$cwGr+bu-_ai(9tIbSxtrPX}x=k4%owY~q>yF#PW| zVZxg;jY~-9TRRbw2sv++ZhZ-U5olrg0CSG1tB%Y=RjSFz$rW`}!!C@BYnBAJf^>eo z3O{s@Jk)h7sg+ETYU@H%_irDpKV_U+KsI7zowl!wB>aLP z`THkozz;@-gZLW%mpcBF4|Uotw|CzA4=FF zkm!Bw0rT(_EmJKr5M>G@-JHOXOvJ&NW?yiQSGY{x5j^tC`V6gmI*8M5o;Y6CHA~c9 zh%5o+R_m-YTHJQ$A_WmDc>E*~qD!zJ^QhBd`{hT_ zmn`9~a%!zqeV_CNWhT+IEj%OgL9&szQ+KZaN|Ws96WWsqJ=IT(8cCgP`;*l`Y};JZ zTUxOgpMDJEz;zf+!5N;rN|BQ8Z`@T;OrB5v#$6SR2*7h!ZO{1UI4#%btu07yXNp!+ zYNxmsA4&6=x_fU(wN71_^rq~V?QuIiJimPFAmSzRdp}&OOYgnDqwQ%U3jD)@Bm3)e z2Mmy=$GqSY+~!W`w}5c`>?Ny|@#0Ty z$0-}(!T5w-&Z`|!_!ZxvL)+q0`KE*v7!-6q_T|qXi~n`fQRFnW;J5wqfaHV6$+#AZ z^w)o8VEz?^{PWd+(SNuLT}XKJ*dL6tQ`}uIw9e`f!u%xgV(sE1UCjK(NfUVxZyfaj zz}2;pU+mrnpVXmMJd@crN&iVOQ|a$q6%j2%Ii0jE?Ff>ys_TCffudP9A6#z|Jxl#~ zzv@s0Y>xG}_DOT}DzE{dIO;LeXk)>d z!`axw3l@eJmEW6lwuoj~Wrq7gUg_0+DM`0aosM27Qj0LZ4-Vtix1S49AAB{|`501# zl3AU3NE62NY&WK+PKc5yxXxIb<~N02c|gG4SSGlcfDbW$H|KCoBy3`<=&o9IBWF4x zS`kno1D7W>1i<95aKP=QYT1A5V7pFn95Qk#*@j3WLCw^C{bqi%k~`$%E>OE8qh6*8 z_f290_aQQT?H}1n*q(gxT=75+`}_^3&3YE(Cqc0@!~DA+kA5?)^CWZkQR-^`glVqs z*l!xk|K9#Djs6=Z=WZQxPbV*{GnG0D$B*AHopjk*H4bEO5MVOVa70F?7Lh=C?0peI zhJ91}mFP`CjQ_jMLbG_F>%2@AZ+Z7h1)f7MQrKq%9|A_=Y*P-tg@!{I|0*|pA0f56 zA}=VqJfM`YjL=PcT$|T?aNzWkL`nLQf5PGd?8VVSoxa?58O>cA(lA&$NfYN1D?XhW zb#ZyQ(uZTvOHrp8T9X=i6w!|JXCY#V>z&gmxsz!;afl~9NIfkm^!kJJVC*_$ zy*i%sK!7%T2~T=}x&3ljJoilHY~$$#SJsZ&a2CG6-@r_w9d&WDV;2K-9oZ~C(c@g( zQio-DxY4dN+x9$H5I2yasbuW3<#P*sE_+9kC*;lx^p>0$Zn5-$(&>ND|+<*;ESHv>{{z16=Jgnu^tF*#23*xp;RxF zoo1^!C=9fT=ut>;!sis9DNwKQu^-bu?Z8i zJ|RGz9A8wt(|LWvIs4e}CfwfLO5IFJ4mvG>io}{7c%&Nt$nw26O*4>|HrF8_0b`At zV26~N?!fg>lP!oo8$4bpkY4`nA9$gSgIaI8@pz#ooArd~Bevn8;>Ylb{XXg(BPS3( z@@f9#A*2B%{QbqPO(tO-)wZ&fMb78Xj!8%#*}>1j9Z0$I!8C{75)ZfR*ubY&+YX;= zpKB5}QJ!gVeAwOwY@cgXC0LVQi+x+RhTT@i)^JwAHlr*{Tw^Lyhk|2FO>a5ezr9eW z;2GOw&sy6M(n@zX>@Kf?N5|l;uac&bTXwKQ zeVi80W^P{o#~8Jahn81MVlE#G|0F;nqAdWn(v1P@3`(9!1*Z5M_b8pjQLV~BVGlY?*nHsXh@L;hnrD!Z@0I?*Y|7gT^r)HYN%HM0cdnxYU(Rx6gR`r{3)0%) z>o?g5$E@>|Z9Dn=VAEs;A$jH5-lsb#9)H%$AQ+Z@s=hTGwISpR!msvC7p*@DzUqou zxy1WeUDRZ~aHI~m{I1Qb=rEdkv>x5V2yCk{;5_nnADLWV$p5$xBsAPdcQdzA%}ndh zUfb5MirV1Mw$MD6mVW(*MJPYTJ*S%CE5Xxq>(Bds^GXmDjdj9~-DI!2%0Gm8(-Z!x zD^>JP<#IR8drn8(huc~YUp3KvVP zYt#7>_Dd||5vk6&3eWSovm&fw&MS6*5)7H~JSe(Zb7--DVa&vFocd>Asc!S~pnQyl z=TcyOy_$Z>fvbxnCOPC0(gZ$9-q>~;C}F&+{(C)M`M#SH6~&11N!X7BW2LWnu!KK~ z@Br0L|H0PGSiH)PPhI4TL-o+NuBGY;rnp>~N1Tj2GhsA#c2w|~kK+vH@hktVpM6S* zUwtIok;S{I!yx#jx%05mXK7%)S?FKo;eTrX>xb^2{uCs8@XNQfaK4Rm8qV<1H`C_1 z`8jd2!$TDU!c}%I#JXcbk(l;203s8^Mwl~$!>8;XG2mV{ZEOnEW%OV?iUYQxF!@KY z=sOKxqCmv73X+#Fuvjc1qQcB-vy7i(Z_cQ_2JuL9x~d` zepm6s_3w754sLxM9~6;!k^-p?hdiy{81n)f`;B5_c?CzN);?(VG8YM#m-z{U8%4EI7}!?CJdQORhtk^P)WKNXVkFeodj1bzR4+b-niR?Aiz0>M)+( zdwp>%aBUreNkJ>Ja&}qwNW@XX(OiHrLLtv!9zMmqQmsZU(h;7jN1_h=n5J;s(ewj< z+vVjr!A)7SHn^2Jxn+T`8(qog5qWt|LMUtLSFn+6eDsr=u01K=;9Z(?u@h{~bcQ#J zz=dMUU`-Euegu>$1qy9E)JlOCq$zhtqHJ80F<4hhDqfNF(Sg9`%&{T0_9&4Oc*RX? zf4PE8;hayRE+*i9{V)KTd+UH3ZP}toXrBW;vZMx9 zyGL%mPWPeb0yDNsBbic}Q?pH|ncd!LSuGo368=n0c?IcS!~TpiB#r(o8~yB-o>+bG zf{rL zt&h$vyH9mBN4}wG0sB_?g=s?iE6xh?k2#f9#!A|UxU}g(4Fd|<9JA%rk@}8y&b*qX zwG*{M`Zde9tvqaA1)D?CR}f+agdf$?WiD>G&~^|pJX5Hj7@T-3XrR_GseZqlQ|@(4)Wn`11P9Q>xK1ic+*=;3t8C%rrJ( zBusjGu)%^m+Xd~TA(Vm$_n0V%*jk2ltd78uX~xFZX;Q9nD~=rp`E<1-w~`;Z^(P6Q z+?Kr681DWkpv4gEYifa_5(!439ADO0$f zO^F~In*%8X%gb8iFUW9TrUO0U&T78d!DlN#huEKlnpdZ$!jH_2WKHH~XWwZV_HcTJ zWxydOe%)z(Z4>Uci0A33z9#iOuid`l1jGcG7%3Im@gV!N9sH*3wOuy=e$kR!>?9%_ z@RLfKr3>82>voy2y`QYk##^wSLAUaK5eC+EQsNh`rZz^limFgLSPB8kY4E$xad+(V zR!+*S-lRG=AjiDLaA8EUW%+$t3$*5`$UnIFQg?2nIkJiK(bWp;W zsW_n%VjNcQFtP3+SU>8k-0qo{&?7td5xA$;rtB}N&!x8u|%4qVaz_C?Pm$WgarHOV>N~4l(`3V z9SV8#eQSANIrus3)CXJDb;dLK6g{Kt-VyzsS^BmI zCnL3CeP5$8!SWjx>2f|+HEnv|Jl{H*=-yab8dumT)7M-8x*|p3 zvY(Ap&(5w+UQylDmT9j$-KzGmd)DgUgsNDP(qUg)`-lfANmO6~6L{<_$5veHn>q%F z*4401t9^ouUeM?EM<9W2S`>!+UgvIVo(&*w@=9M`&y@)Kw9lHNmBPbMcc8lZpT?Q% z(QF$fajMNU)5lVxJo_KI#)$T~0C%pFcwrmcoVUi4v@Cxh^5?f7rP2ZClaji%PjXgP zH9*x0ozaw@oZ(;Zb~b$woN+UKGe3HhdV=O7MFpEzaRL{7$Wyv11|?LMGV#q5Td#O* zFLboeCa4guzpb0lxBU>NIw)(FlN2~QswyzKYuhJkHNW~E+4~!g;3E?kg z@t2CLwWV9>jeZ>UAyWk{7x5C7y%$&`JTd~D?Af1N>c7LSV#x!`|0sNywMJ5hTjr0< zz@^a$5ZCF|q4UU9Yge;#l6IVENI*-j^Ep2Aa*MWgUj{>7d#rx|jayPNPaSs$ zlI(Sirz-hHdHV8iCTuf5nr6O>c6X>SK|9)GY!N&uy)q@+yGEO`(-}4zbz9izO615m zf{VR%ye=y(%YH@^o4MrXJd9P&fvKA$co4gu(p3uOwj-Mla+(YCzlMs%byETOzsU*n zfAFxdL!ey_ukrMk^+I^^%gvI#doVDKs>3lThf`IRZ7|cfuI#*zAKyE$v~StK@j2nI zQeUr5b4uELK?uOt_+W_DJ)I5njOc=r(s!r(b-``qWe>l6CVDS0?k?Pzp;RAKoE&WC0uF>2oBE*B>HnHu$vlipMHaZsc6+oTqU#Yzn{)$K+(& znd#f#huMxJ(grJcnx1p#YuTwHoqD|NM@BS7>bT@itSw5)YQYLqB?4PRjL9aKV&uN- zPaV11V-RNdI=E9c$xTPn&lVC#rcKHW?ah+b3ci@SDA4f{2~t+oPh6{*3P4|K#2jmW z6u+cKQ9B|f?w_dMYg=2fdRD;BY+IFfjZ8M}gPqm;y{&J9i-1xEzLKuq4oQ7`E!K&> zq%M27Y%S~S0ghM!)?Ne|d5H_vrSaLjGj=2QR-O-PIPp+dxd256)fL;ZzU3f$I5zZ? zF1KJ+{@~gL+rp(`5^ZP?2Ta4RapvoG0zY?=uis;SXwsNE+DFbuID)`O#gXUSw9a{m z%r{v=#kqdyTvaTdW0?434x1aEB8@`>kFboRe@npo=9Q$Kw4&4g5(_SDVG$w(PXyeH z6Dl~Qd{&G=sWm1g&1mV}oezj|Ag@fj9ortXoGgkh+c(4rBn@HqL^!hdlNKLP*p)n; zMO>(Z@APOYQa_r17%r~-@Uyc&b45*bTK5S5I*_N*w4Dcpg?B>+8=36v1_e_amg^Ot zHe>@D{35)65=7*#HG)s39(USnrGugC>{!^o6zxvOj10{kUHb2|xMR9$dF=T}b~c*y zl0tsMo$+F=jViOE+fTk08r@y^{FY0cR@sJnZ^+;Rlu>5$0@Jvc2pyP5MW>eDk3{kE zRA6unS^4=O2I{Y+cdVnF$nP_K|Kr#b^jjql$Nb-)q$W>zaj1axi{~2${+q+zc)-%p zxBv8`(w|6u|K2H%PeP7jcz5zS$Ry*;I}}g2<3Tr$=hurytuTvC<8LM#leMp1LE4}B z$DvGhUm_aKY-)E%=8_8U8nk%MRq4JxO;KSV`Tw0O4s8#cSCpf8+ zoWXpyriA-2<0Mq1Ty#uNJ=o|Jf<^7C`~z`!!`s#e{u{#P#|)l;Wu!>oU5S&M9p!=T z-@!Ar5?DAF|8P;Rw9Uql%;T%)^KuIc?!|Pwe8POHq&q1uE|{Iym%aT0UH7hWt!>`T zqDFBI`9RUoMd*)yINkH->EA6Ds}=9fP%(I0Y%)1Ov|v{d(9em^6wSHRYQeW9cttpu zF4W*!Z+|S#6>`zyP@S&HstJmpD}L~wumx+Yu3-N&T&9Xu<-8-Yhow`18Eed zQop_UNl>UFEHV6`_HR;UgAYvoaeo`Ipx4&#a=z`cfkT32dNouZWi%ZqqsbD$6fcViBaFCUp5#5-gBv^mumq1>NzYJ7L)*wWQs1PmOnjB9q&+ zbEDv1E1#u%OKhW%(5h32xjSZ%Mj$k_V)DiRoNYJdA&Cd>#j@>O9@N2-3bLRtnO=tO zwoVo9!u=9u1g|2q5fLF&)o$+wL=`;>pc$5bB=E+XiIJ^ObW0lNw)4Nz4SoFOlaz{k z6y>YVmeF%2^Gc6>8ln*XlBH@cbl`%`+2E?|Sci{D=}vO+@`+e(MGER;+lWTZ8pNCx zh0lNNjcw~TnH%9-?>o!h(4f%Rkp047^k8SbsYOLs?E2ZsK#0c0osJ#x*nMwYc%y<( zGDCsbP?f5NABP-wjy2#QI&ExIV^5e%;teRzIvd(xdBD7} zAWo-sBLACY!ZilLQgq>>v%X*M@v9M_hWB4u#*aq76mR668}a{;d2LAC!KhrTYq1(9 zzm*6LhyM1ZV)_rhJ{GNbG&-?)@aa*abb zJKT}I{s6^8w@-c>nhr58fT@c0fQnB|L?TQ+05EomCCsZtUN0n$8P;`>9^)NWKEoW4 zCa$i$$dRgTQWs+jss)o5HdM`9Ho62famtuD`9}xr69+QN#SF16y;_1`6Ngft+IslC z*;!NwU{)GfZuI9C^gp=g`=>W?DLMj-0*&Yj8DN@|8)l~o!>-$4Ex+Ywcl-;kUA_Mi ze&CR3;(FUOL)u(ZiK$HenLP1UKSi=gjDITP+X8PWKCll6V0gLs;|>Z9jyFTtqGbITpiV4(2aeLTmQ(6HXuMvGKC3}dOy6{WA$BaI$aLEXh% ztf9C7*Xx1Xt=_Gp>GmV^?D12Um7Cf;<>KwhL+}+v?Wv>rQwfC!BrafLLxC$Ka2xmS zAAV6)X+N~TPanv#Kyl30dh8`98_Qy!?B7jfXOuWvS;3U|;`r%pCw>tQ8YyqSoyC5m5B2$iy5tNSZTsO52@n|I+nwb=#laDU}E4_mGOkh<}xpa9m##dk24 z{8`HiC?az?VDfW68wO>VSk$Z=RMw$goUAX=`6`+$-vp2CC25hJ zEd+=kW({6rS#rjc`r>JcwkY`Vq`uDw)YRDjAoUd#-g;D>m7Cb{ds3CAVe;X_Vi7T= zQ|@d1g>NexwtPmdKTj08Hh&AFUiXqpt!xeTxP4>OW0Eg?@V4c4Vo8#l)`4!-mx{Mq zR!!2}V6P{^Nn+Ce-S)4(?;S3YiMmlVTCfJXL3nMn{z=WxqM93ZlxG1A$KMcTRx z{@8gB%JIFlt35~~`X6id_bSx-rqXpiOujjeBOUkluYi(uOM9>Bh(z<(q>NVRa)1%h z?UkQ%daZCw*-0P@dx0I z;;f7@R{!|2we(oc6N|OXT1T|b%($!F)rCHaIc{w?Dh`J)Yn2K-8P7h!TF!GF;VYh* z42)wV>QxxRWhq_2DR~8H9rbFb7Tf0VseKO87)5Jc(DbF&oRaAENvQ;XWd61UbF~@@h<)b%)qj&PiPBW-lrRxv@W-R zF>YDyj9`>lxmF(t+AL7Vqo@Cae9JpU*EHOi74TsNt7!+%&h@F18!g6x}?QgG!0(&U#*S*UZ-@lpoU+&m#XVNX74k1x+B@C#OSl7>L#|7EEy}| zyOI0hjDyp~)D}?x1p~efJ2=)z3#&ReZb7WEQ#YgBedEA76;u}3$zO66hYM> zRt#)cCdVJ=#9O77F~@|S>)+USQq#ZogYMWsp>i?Vhghpzv?MAnRHWC)61sG21napX zt3~rIE~7myDI=7zylvB6GMe07hhEsPje7*$p<-14H?WJZ1((F-eTmqd zhHh%<{znJ(fA8@A&;J{so|n9KMVO9-*PJ{Yj9{>qb+Vx%+H%6ZzwAyEzopyKjIvMG zwR{-3U>S#1Z$5hk4G*I>#MW(g2=S4L1-C_eiCdSfQG;2R1SeV~(WF=fZz8+N) z7QJpDc(m_(C;<%Vn0L!>nDV5QIc;PpSLr4=B^r__aGk**k5P*>au<0he+PVF>w&W1 z-D0to09S{!x$}EJV*Y_R=>;bd)b#&_FavD})Z#=896{e+@$`vZ(z^T5(3|VVaZijL zkS4lEF$9=*2c$hu!a9xdS}U%KQEL8x|DpEv>eZ4Y1A7WVkx7BjVNJ!;C7zmHSi=^V zd!I>=t{`jW3&Jh}N{0WfM{7G=pZ0wujI-h{?UCgAzgcTS;H#6n1Y&Utkc(-D#{AWE zdsbZ#YSw^e`NXeX;t}C55h}k-sxl}vsSG>LygJzE5VEPZ_u`k04}KYR7VqM1}l;CU4_Eo(WP>kogl?5miKo^vy1evj#I2EJ$qUVm;7q0|EMm824T+{JM+#~P?9gQn1sqe{F~i$wy}RH zI8*Yul5BSrqi>4Ae`Gfb+CN5N{Nlf6-~akx9a^n*sCW-?=qhq6K~vvVBGu2v86knsSNdna zuic8Wiix9Y-meE=OEw$Hc0y-ZZA-5zJpk;X@t(n|^i|tW5ITOh0{IdyaOmO6k?*EI zBv#5(>BlL0oem+s^x%K@1nRpoGMoSBd58DX$p3_w4qRTH5o|qrddkSaI3at;m3Hoh zucHsLVi>M!8v z@wZu@DyRp$NqcA7xla>fh2@MbA4Vx*<&}CX4H+(6h#NA`Z!7q@uUIQN6u%083fpFl zvYa@&kS)T~un69+4mxkfr}r1U)qwRFX9I^zGW+3!^UoO-FoPD7#9rfXm^~@$_YX zr#bKSKe!;m;Ugjg$VnUSriF0|bq^2J>-IMt8lGA4v(I;UD>#1=Nc#wOZRvU7$x%#D z%CK?N@;*;OOS*OTE;+B5KxpbX3Lxkw+FgHq?#6!+O`SM!FtKj6K6k0HJBn3iY|FRP zO9yjY(*0&o>eIX0Vks@_rb#aKgzDm+M$gAJ@`fi9kMcbP9?-53GFkx$%Q-iRmfTLN zd@5J8mu{(4ztP*<&~QbedK1;h)D_4hqoZUIJ*f-6;MJKXk4sCnb?t`SbR6z z(O1T2yGq&ScD~w?a2O6+gRKNx7$4+8^NIr!)irq3r5LB;q<5C9{aOGNSalZa4Y7Ec zU3S~o(`*}iUW_?BK;N$rlCLJFAn=;PKu)FQG_eUmJSObeL)S{}>hic(l~Kh5E32YZ z)7RgrN{7@zN>P;XKL=u8_0aAd58VDgCZrem*=uGCK(|rgu9^+doQ!GRXaAbR9t`_C^Ww1z(-K}NG zx5>bIcRhY>>;~~8r-F}zZQtj0sJ5u}X==7s?x=T=BIX-J(6zQl{T-t&sK>9=2+m^u zS`rr-3}I1zl+hf`v-=oJI>{F|S8gLGL#CMBAaP`!&LNzp#_tW+P&c&Wp# zj#x+;L2*_K(n5Q<;7vW)B3CudArxFni3X}G70t>AtG{hDhi!7sJ+&-Hi4Wu-d2YG= zu!5Fw_|#}9-Q)ZiN7U2~#g_v)xqQ2IR2?w$_Fg{)q}S8iI$d9++zK*CT@H6gYDglU)W7)?&Ivl&S*INF+aSIf z>*@tJ-B79lGjohgCuQ~J{r1SC&?~2#f?9!)T7H(9(Id^s0p~Ne_UO7JyLIr>LI)T} z^T^DPrf7dO{zjd6HMz|!$~#Un!4eb`r#_|eZ}=x<{BqTg-&73NLSEB za)gKbG!~)1Y3HjJranj+m2%*a=5GMV#2j8sMGne3*3@8wUxB@4k_2OSSrW^65rf?e zE?Wk1$RY2?GlZSIG>tlr@ys=*!-~bZaVrnQhKM6P@(+yXJ3J*nM{!YHLkadQ zx{c;=mfbuPe&Vca^8%dDoDrzisYXHu_LK=FHTKV7C^OQa5q9KNdFr0afucBJXHK} zOT8VokYd)WzSsL9*`wR0^tt$x5)IOr_Qwrl)~}%3WJGHl&)Q=Szit@!rhp z9_DswHd)Ww=JaDtSs~uwVfcf2vw8=H;1^y;5&GgDncsSN(tyDE?KD$C(9&rB9zLBh zZbr_=%#I%*M)x6}M$V>tmkz=B0&ROqz6EBe8Uit4xEtP*z3+RRri&89kRxfbckArn z?a?Ons-^)t9WjBjtMr9e31sZwu77G> zVDr{YgF;c`c9)=Otf+7aLs?WiNJA=TSKpReHCkgH{?vg#F`@5Z70S(R@($!h*!IeB z6r>k8N)*|-sb41sU-BH-2erG6ZU~iYzDYAHP8_Pp6h>YlbK)?0A47RtsLnmwGN3L@ zy`K(Ze4gs5`=&^dmikb9^l_~nCB%A$2VrU-fgNAdwfrjfM7Vf4hq5=#^Zl6%`d~7y=b{+LUWH<@tI)x?rj*0t#^jZa zZGn?SeT*S?T|$?yqwUmZC+wcL=cp)i-7_BiD3Ah1U^Y8SHaf=74GY__RS;LU-8dQP zP6hUfj%Sp@{Q!b%sgG4pIn5SsM2MDaR}dGu-g87RM_Gq=Tjza_f_gDSW8+@w?^Zq- zs2R_97BKYabrY-D_G@uE$4xKU6t}UnudglE4!k+@P7=1Rx`6`0&M zw=$zwaOi|uR_LCvWs$Tv$<9q0=&xESx5vr@@T^XZBa$hgws$$G)byZexx6|o z$5z_Vc%Kq%TznK-l@B>??DyK_r#uz!#)Bsn`d52@v+=X$-t&#e(>7@03w00QkNQb% z^&*?(v#Q?uZT@|V`@e3!1D=5K?{>3Ar9()|kZT3No4i#1BJJ^q{_8+QN4L*Bp^fmSW7~f`I2z6EGEtht6^tddI?s&G1 z9_{-}2$rfy67jcumli2)!-~ZonU$H?s?rVOT&kaIZ^pkF`QB^s#aFC(E3Sl6t*qk9 zB7p(3`}ksTWcN&$FY&lo$+(8vTB5+Zj>Qgx!hGZXnhWAC?r3Mh+4<498RoK?Zs%Cw zk`bk>vB14p{lulEwnk0~hDa{E1|1RKRKQ-nU z<|RG*PH{tt$G3iPps6XN9j;rPq7!3Xs36ydS!cPuBkiw4ZJ}i8Y1zEx}#Nay`13&LQ<#dmfxveZeD{)|=_1{n6b@HwA>sb0LOj<8FAoQ>L58{6AJv=bNG;y=nv*3mj@fU$% zk=r>D5o)&ZQH>!jjqhqmwU;a6Nmk6HKBO)R`r0b)aYK@rK5jD#GtQ1E;*YnmU@(*g zc`I@cM0?35WRo$lp*LgltZ;K)TKQz=$GaiG^;QOF@ZJxZzW-6(wMIjsMPYL9q6d~o z6fqdpCDT%Oyuw)W8irAM#EeHHZ(Rh!E@|y7~L&9LZ zBIIJGJKfg0+#mgGtycfekMGCXd!K#wIeYEBKkh~n#X2zU7faVe1EN)(@k%cxg4`td z!J@0T|50l^rG^mp8MvjKdjQie1`pNftARuJ~#td%yunC4I_F!D6i(^7hbC}(& z2f{)_mJ}k%=z%NfamJE>%yYOXEnvp}Xk&jrD`lgwshH$S>@1D_6_3qhWi??%EkqDr zrHWEAP^BEI70EDS?-J!0FhH#!7?*IaQJ;VjhIdIAB;ZssiEl6P{qj{u@5k$On%5Ch zHPt|}ZCCLT@=1_!ow4;td3~!AL6ZdViG$u(J(PQ=mWDIdsu~tK-7yXBsdBTi+K+>E z#Eni@SlOL9D1#h_z7u)KOCm#sq@(9{O{jVJ$i5rv(Zgq_H#T6KFQ#;FjnK>w4wCDCzXAyp*b@6Lxe%RSQei6#23NA2 z9L_fG>r0n*v_6EY$Qdgv>;h7ggAm>JHNp!XE3j9DQVEQjT6S`B7;D`ZV0}Hp3Wj;3 z`n;~TvjU6J?Sv(ELR1b_t7O1=10aeaP(!uA2X~vyV(!UC$<9f&X~&-cA_eKg32Me- z{l98#e{e3TW)z9rywWP0};s5|Im7>)K*KFm%E)ti$))#Fn+zG6oi6wrEcEu}e)FcGg*8BQcw zxYmtjos-A)Z)hqCFT;PSV5Anau-yO0(WSoJJW#Ria$tL#lp^siGwsFVpLku#)!O;J zq9B|g$TI4!!_7G#G-zzsEdk|ca*8qMo5aK0bGCl;YHILuwVUrEESBU9xktg8s-M&T z8xRQ`5xi-XTcjnu$Z>joRahJCVX7iAkw{dev74Z{=!M7^ueFqs;%rXz+G6%uL~CQQ z{GwTSk-ljOSpAjHF|y#7TNgFYn#r1ejf_8dw$@iti#9Tgs5ucc};`;{NlqY$PEl2=E>Tq@p7Rg^X?p2?@;!35QQV zMO`?1`xC0DcT1&L0o{{Zu|l6tCVS%9kQ^x~_kf+5PSfBSlQZXIjSJ8w5!JcG!h~!E z^)VgYsZa%|>g$h2aCTSrvNMC*1{WKC6RNr?{>4TJt*GT1m%Bu5Zdm+2G6mb1O4}a- zrqBD|A%}U!)*tu%rsW(%wT@i-uB!UU&(YJ}&q+)=eag(2p`IbqiWfud{)CQkc*dgw zhDm_}UohuqfCmuyK3-fJc~r*|s^JL*-6LG=Jf+V$dG&5^Eo1&hh|=1cWkWt>@;o%< z2u7nwCt!HuW9=M0v+W^0kQg`>^H~T9?AxWLnO*eXtiK<92mM?X3M$`!yON)W{sCj* B_C){y From 6dd821a6a5b77b73f6a7dd02e54ba5fafc763757 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Sat, 28 Sep 2024 10:53:27 +0330 Subject: [PATCH 54/65] [refactor] Refactor dependencies to use `apply` block Refactors the dependency management in Gradle files by using the `apply` block for both projects and libraries. This improves readability and consistency across the project. --- ...otlin-compiler-13236832659117465399.salive | 0 app-watch/app/build.gradle.kts | 27 ++++++++----------- app-watch/navigation/build.gradle.kts | 2 -- app-watch/ui/build.gradle.kts | 26 +++++++++--------- app/build.gradle.kts | 22 +++++++-------- build-logic/convention/build.gradle.kts | 10 ++++--- core/base/build.gradle.kts | 12 ++++----- core/uimarket/build.gradle.kts | 6 +++-- data/market-remote/build.gradle.kts | 2 -- domain/market/build.gradle.kts | 6 +++-- feature/marketdetail/build.gradle.kts | 16 ++++++----- feature/marketlist/build.gradle.kts | 18 ++++++++----- konsist/build.gradle.kts | 6 +++-- 13 files changed, 78 insertions(+), 75 deletions(-) delete mode 100644 .kotlin/sessions/kotlin-compiler-13236832659117465399.salive diff --git a/.kotlin/sessions/kotlin-compiler-13236832659117465399.salive b/.kotlin/sessions/kotlin-compiler-13236832659117465399.salive deleted file mode 100644 index e69de29b..00000000 diff --git a/app-watch/app/build.gradle.kts b/app-watch/app/build.gradle.kts index 27c3450c..199f2cad 100644 --- a/app-watch/app/build.gradle.kts +++ b/app-watch/app/build.gradle.kts @@ -35,30 +35,25 @@ android { } dependencies { - projects.apply { implementation(appWatch.navigation) implementation(appWatch.designsystem) + implementation(core.base) + implementation(core.uimarket) } - - projects.core.apply { - implementation(base) - implementation(uimarket) - } - libs.apply { - implementation(compose.activity) implementation(androidx.ktx) implementation(hilt.work) implementation(lifecycle.runtime.ktx) - implementation(libs.hilt.navigation.compose) - implementation(libs.compose.ui.preview.wear) - implementation(libs.compose.foundation.wear) - implementation(libs.compose.horologist.layout) + implementation(hilt.navigation.compose) implementation(work.runtime.ktx) - androidTestImplementation(platform(libs.compose.bom)) - androidTestImplementation(libs.compose.ui.test.junit4) - debugImplementation(libs.compose.ui.tooling) - debugImplementation(libs.compose.ui.test.manifest) + implementation(compose.activity) + implementation(compose.ui.preview.wear) + implementation(compose.foundation.wear) + implementation(compose.horologist.layout) + androidTestImplementation(platform(compose.bom)) + androidTestImplementation(compose.ui.test.junit4) + debugImplementation(compose.ui.tooling) + debugImplementation(compose.ui.test.manifest) } } \ No newline at end of file diff --git a/app-watch/navigation/build.gradle.kts b/app-watch/navigation/build.gradle.kts index 44202f01..9d68faf7 100644 --- a/app-watch/navigation/build.gradle.kts +++ b/app-watch/navigation/build.gradle.kts @@ -11,8 +11,6 @@ dependencies { projects.apply { implementation(appWatch.ui) implementation(core.uimarket) - - } implementation(libs.navigation.compose.wear) } \ No newline at end of file diff --git a/app-watch/ui/build.gradle.kts b/app-watch/ui/build.gradle.kts index 84f627d3..3782c4c5 100644 --- a/app-watch/ui/build.gradle.kts +++ b/app-watch/ui/build.gradle.kts @@ -13,18 +13,18 @@ configurations.all { } dependencies { - - projects.feature.apply { - implementation(marketlist) - implementation(marketdetail) + projects.apply { + implementation(feature.marketlist) + implementation(feature.marketdetail) + implementation(core.uimarket) + implementation(core.extensions) + implementation(data.marketRepository) + } + libs.apply { + implementation(compose.ui.preview.wear) + implementation(compose.foundation.wear) + implementation(compose.horologist.layout) + implementation(compose.ui.test.manifest) + implementation(compose.ui.test.junit4) } - - implementation(projects.data.marketRepository) - implementation(projects.core.uimarket) - implementation(projects.core.extensions) - implementation(libs.compose.ui.preview.wear) - implementation(libs.compose.foundation.wear) - implementation(libs.compose.horologist.layout) - implementation(libs.compose.ui.test.manifest) - implementation(libs.compose.ui.test.junit4) } diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e21248c7..28ac6a91 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -34,14 +34,12 @@ android { } dependencies { - projects.library.apply { - implementation(navigation) - implementation(designsystem) - } - projects.core.apply { - implementation(sync) - implementation(base) - implementation(uimarket) + projects.apply { + implementation(library.navigation) + implementation(library.designsystem) + implementation(core.sync) + implementation(core.base) + implementation(core.uimarket) } libs.apply { implementation(compose.activity) @@ -49,9 +47,9 @@ dependencies { implementation(hilt.work) implementation(lifecycle.runtime.ktx) implementation(work.runtime.ktx) - implementation(libs.hilt.navigation.compose) - implementation(libs.espresso.core) - implementation(libs.compose.ui.test.manifest) - implementation(libs.compose.ui.test.junit4) + implementation(hilt.navigation.compose) + implementation(espresso.core) + implementation(compose.ui.test.manifest) + implementation(compose.ui.test.junit4) } } \ No newline at end of file diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index afa07fd7..5c1e824b 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -13,10 +13,12 @@ kotlin { } dependencies { - compileOnly(libs.android.gradlePlugin) - compileOnly(libs.kotlin.gradlePlugin) - compileOnly(libs.detekt.gradlePlugin) - compileOnly(libs.ktlint.kotlinter) + libs.apply { + compileOnly(android.gradlePlugin) + compileOnly(kotlin.gradlePlugin) + compileOnly(detekt.gradlePlugin) + compileOnly(ktlint.kotlinter) + } } gradlePlugin { diff --git a/core/base/build.gradle.kts b/core/base/build.gradle.kts index 855e5b58..3736cb5a 100644 --- a/core/base/build.gradle.kts +++ b/core/base/build.gradle.kts @@ -8,12 +8,10 @@ android { } dependencies { - projects.library.apply { - api(projects.core.test) - api(projects.core.network.ktor) - implementation(projects.library.designsystem) - } - libs.apply { - implementation(lifecycle.viewmodel.ktx) + projects.apply { + api(core.test) + api(core.network.ktor) + implementation(library.designsystem) } + implementation(libs.lifecycle.viewmodel.ktx) } \ No newline at end of file diff --git a/core/uimarket/build.gradle.kts b/core/uimarket/build.gradle.kts index dcf2e22b..3245d683 100644 --- a/core/uimarket/build.gradle.kts +++ b/core/uimarket/build.gradle.kts @@ -8,8 +8,10 @@ android { } dependencies { - implementation(projects.domain.market) - testImplementation(projects.core.test) + projects.apply { + implementation(domain.market) + testImplementation(core.test) + } libs.apply { api(platform(compose.bom)) api(bundles.compose) diff --git a/data/market-remote/build.gradle.kts b/data/market-remote/build.gradle.kts index dda45540..deb68685 100644 --- a/data/market-remote/build.gradle.kts +++ b/data/market-remote/build.gradle.kts @@ -17,10 +17,8 @@ dependencies { api(projects.core.network.ktor) libs.apply { implementation(bundles.ktor) - debugImplementation(chucker) releaseImplementation(chucker.no.op) - androidTestImplementation(runner) } } \ No newline at end of file diff --git a/domain/market/build.gradle.kts b/domain/market/build.gradle.kts index 5e786072..c04e9ed3 100644 --- a/domain/market/build.gradle.kts +++ b/domain/market/build.gradle.kts @@ -12,8 +12,10 @@ android { } dependencies { - api(projects.core.test) - api(projects.core.network.ktor) + projects.apply { + api(core.test) + api(core.network.ktor) + } libs.apply { implementation(javax.inject) implementation(coroutines) diff --git a/feature/marketdetail/build.gradle.kts b/feature/marketdetail/build.gradle.kts index e1694ab9..2c43f514 100644 --- a/feature/marketdetail/build.gradle.kts +++ b/feature/marketdetail/build.gradle.kts @@ -8,14 +8,18 @@ android { configurations.all { resolutionStrategy { - force("androidx.test:runner:1.4.0" ) + force("androidx.test:runner:1.4.0") } } dependencies { - implementation(projects.data.marketRepository) - implementation(projects.core.uimarket) - implementation(libs.espresso.core) - implementation(libs.compose.ui.test.manifest) - implementation(libs.compose.ui.test.junit4) + projects.apply { + implementation(data.marketRepository) + implementation(core.uimarket) + } + libs.apply { + implementation(espresso.core) + implementation(compose.ui.test.manifest) + implementation(compose.ui.test.junit4) + } } \ No newline at end of file diff --git a/feature/marketlist/build.gradle.kts b/feature/marketlist/build.gradle.kts index 6956c2fc..cb61c56e 100644 --- a/feature/marketlist/build.gradle.kts +++ b/feature/marketlist/build.gradle.kts @@ -13,11 +13,15 @@ configurations.all { } dependencies { - implementation(projects.data.marketRepository) - implementation(libs.kotlinx.collections.immutable) - implementation(projects.core.uimarket) - implementation(projects.core.extensions) - implementation(libs.espresso.core) - implementation(libs.compose.ui.test.manifest) - implementation(libs.compose.ui.test.junit4) + projects.apply { + implementation(data.marketRepository) + implementation(core.uimarket) + implementation(core.extensions) + } + libs.apply { + implementation(kotlinx.collections.immutable) + implementation(espresso.core) + implementation(compose.ui.test.manifest) + implementation(compose.ui.test.junit4) + } } diff --git a/konsist/build.gradle.kts b/konsist/build.gradle.kts index aaa86a59..7cadb029 100644 --- a/konsist/build.gradle.kts +++ b/konsist/build.gradle.kts @@ -8,6 +8,8 @@ android { } dependencies { - testImplementation(libs.konsist) - testImplementation(libs.bundles.kotest) + libs.apply { + testImplementation(konsist) + testImplementation(bundles.kotest) + } } \ No newline at end of file From d4a20e428dedc8401641aeac6ebeef7f3b522739 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Sat, 28 Sep 2024 11:21:27 +0330 Subject: [PATCH 55/65] [refactor] Remove duplicate `designsystem` module in `app:watch` and use the default `designsystem` module --- app-watch/app/build.gradle.kts | 2 +- .../main/java/ir/composenews/ui/MainActivity.kt | 4 ++-- app-watch/designsystem/.gitignore | 1 - app-watch/designsystem/build.gradle.kts | 12 ------------ .../designsystem/src/main/AndroidManifest.xml | 6 ------ .../appwatch/designsystem/theme/Theme.kt | 15 --------------- .../designsystem/src/main/res/values/dimens.xml | 8 -------- settings.gradle | 3 +-- 8 files changed, 4 insertions(+), 47 deletions(-) delete mode 100644 app-watch/designsystem/.gitignore delete mode 100644 app-watch/designsystem/build.gradle.kts delete mode 100644 app-watch/designsystem/src/main/AndroidManifest.xml delete mode 100644 app-watch/designsystem/src/main/java/ir/composenews/appwatch/designsystem/theme/Theme.kt delete mode 100644 app-watch/designsystem/src/main/res/values/dimens.xml diff --git a/app-watch/app/build.gradle.kts b/app-watch/app/build.gradle.kts index 199f2cad..be703251 100644 --- a/app-watch/app/build.gradle.kts +++ b/app-watch/app/build.gradle.kts @@ -37,7 +37,7 @@ android { dependencies { projects.apply { implementation(appWatch.navigation) - implementation(appWatch.designsystem) + implementation(library.designsystem) implementation(core.base) implementation(core.uimarket) } diff --git a/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt b/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt index d909f48c..8479e110 100644 --- a/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt +++ b/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt @@ -15,9 +15,9 @@ import com.google.android.horologist.compose.layout.AppScaffold import com.google.android.horologist.compose.layout.ScreenScaffold import dagger.hilt.android.AndroidEntryPoint import ir.composenews.MainViewModel -import ir.composenews.appwatch.designsystem.theme.ComposeNewsWearTheme import ir.composenews.appwatch.navigation.graph.Destinations import ir.composenews.appwatch.navigation.graph.MainContract +import ir.composenews.designsystem.theme.ComposeNewsTheme import ir.composenews.navigation.ComposeNewsWearNavHost @AndroidEntryPoint @@ -36,7 +36,7 @@ class MainActivity : ComponentActivity() { fun WearApp() { val navController = rememberSwipeDismissableNavController() val state = mainViewModel.state.collectAsState() - ComposeNewsWearTheme { + ComposeNewsTheme { AppScaffold { ScreenScaffold(timeText = { TimeText() }) { ComposeNewsWearNavHost( diff --git a/app-watch/designsystem/.gitignore b/app-watch/designsystem/.gitignore deleted file mode 100644 index 42afabfd..00000000 --- a/app-watch/designsystem/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/app-watch/designsystem/build.gradle.kts b/app-watch/designsystem/build.gradle.kts deleted file mode 100644 index 786128ff..00000000 --- a/app-watch/designsystem/build.gradle.kts +++ /dev/null @@ -1,12 +0,0 @@ -plugins { - id("composenews.android.library") - id("composenews.android.library.compose") -} - -android { - namespace = "ir.composenews.app_watch.designsystem" -} - -dependencies { - implementation(libs.compose.material.wear) -} \ No newline at end of file diff --git a/app-watch/designsystem/src/main/AndroidManifest.xml b/app-watch/designsystem/src/main/AndroidManifest.xml deleted file mode 100644 index d4db7f4e..00000000 --- a/app-watch/designsystem/src/main/AndroidManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app-watch/designsystem/src/main/java/ir/composenews/appwatch/designsystem/theme/Theme.kt b/app-watch/designsystem/src/main/java/ir/composenews/appwatch/designsystem/theme/Theme.kt deleted file mode 100644 index 347e1aa3..00000000 --- a/app-watch/designsystem/src/main/java/ir/composenews/appwatch/designsystem/theme/Theme.kt +++ /dev/null @@ -1,15 +0,0 @@ -package ir.composenews.appwatch.designsystem.theme - -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.runtime.Composable -import androidx.wear.compose.material.MaterialTheme - -@Composable -fun ComposeNewsWearTheme( - useDarkTheme: Boolean = isSystemInDarkTheme(), - content: @Composable () -> Unit, -) { - MaterialTheme( - content = content, - ) -} diff --git a/app-watch/designsystem/src/main/res/values/dimens.xml b/app-watch/designsystem/src/main/res/values/dimens.xml deleted file mode 100644 index 179a2acd..00000000 --- a/app-watch/designsystem/src/main/res/values/dimens.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - 150dp" - 300dp - 8dp - 15dp - 1dp - \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 04dc7fb1..7b8c8fc9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,6 +17,7 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") rootProject.name = "ComposeNews" include ':library:designsystem' include ':library:navigation' +include ':konsist' include ':core:sync' include ':core:test' include ':core:base' @@ -34,5 +35,3 @@ include ':app-watch' include ':app-watch:app' include ':app-watch:navigation' include ':app-watch:ui' -include ':app-watch:designsystem' -include ':konsist' From 1999074aa9dd6442dcae068b2c12375d652cfba2 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Sat, 28 Sep 2024 12:46:44 +0330 Subject: [PATCH 56/65] [refactor] Rename News to Market for watch module Refactored the watch module by renaming News to Market. This includes renaming files, classes, and navigation destinations related to news to reflect the focus on market data. --- app-watch/app/src/main/java/ir/composenews/MainViewModel.kt | 2 +- .../java/ir/composenews/navigation/ComposeNewsWearNavHost.kt | 2 +- app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt | 2 +- .../composenews/appwatch/navigation/{graph => }/MainContract.kt | 2 +- .../navigation/graph/{NewsDetail.kt => MarketDetail.kt} | 1 + .../appwatch/navigation/graph/{NewsList.kt => MarketList.kt} | 0 .../navigation/graph/{FavoriteNews.kt => FavoriteMarketList.kt} | 0 .../navigation/graph/{NewsDetail.kt => MarketDetail.kt} | 0 .../composenews/navigation/graph/{NewsList.kt => MarketList.kt} | 0 9 files changed, 5 insertions(+), 4 deletions(-) rename app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/{graph => }/MainContract.kt (88%) rename app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/{NewsDetail.kt => MarketDetail.kt} (95%) rename app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/{NewsList.kt => MarketList.kt} (100%) rename library/navigation/src/main/java/ir/composenews/navigation/graph/{FavoriteNews.kt => FavoriteMarketList.kt} (100%) rename library/navigation/src/main/java/ir/composenews/navigation/graph/{NewsDetail.kt => MarketDetail.kt} (100%) rename library/navigation/src/main/java/ir/composenews/navigation/graph/{NewsList.kt => MarketList.kt} (100%) diff --git a/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt b/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt index fd50c296..472caecc 100644 --- a/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt +++ b/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt @@ -2,7 +2,7 @@ package ir.composenews import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import ir.composenews.appwatch.navigation.graph.MainContract +import ir.composenews.appwatch.navigation.MainContract import ir.composenews.base.BaseViewModel import ir.composenews.core_test.dispatcher.DispatcherProvider import ir.composenews.uimarket.model.MarketModel diff --git a/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt b/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt index 7ba931e7..46852473 100644 --- a/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt +++ b/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.NavHostController import androidx.wear.compose.navigation.SwipeDismissableNavHost -import ir.composenews.appwatch.navigation.graph.MainContract +import ir.composenews.appwatch.navigation.MainContract import ir.composenews.appwatch.navigation.graph.Destinations import ir.composenews.appwatch.navigation.graph.wearMarketDetail import ir.composenews.appwatch.navigation.graph.wearMarketList diff --git a/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt b/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt index 8479e110..b11a80a5 100644 --- a/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt +++ b/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt @@ -16,7 +16,7 @@ import com.google.android.horologist.compose.layout.ScreenScaffold import dagger.hilt.android.AndroidEntryPoint import ir.composenews.MainViewModel import ir.composenews.appwatch.navigation.graph.Destinations -import ir.composenews.appwatch.navigation.graph.MainContract +import ir.composenews.appwatch.navigation.MainContract import ir.composenews.designsystem.theme.ComposeNewsTheme import ir.composenews.navigation.ComposeNewsWearNavHost diff --git a/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MainContract.kt b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/MainContract.kt similarity index 88% rename from app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MainContract.kt rename to app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/MainContract.kt index 82fb6cd1..89015ad1 100644 --- a/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MainContract.kt +++ b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/MainContract.kt @@ -1,4 +1,4 @@ -package ir.composenews.appwatch.navigation.graph +package ir.composenews.appwatch.navigation import ir.composenews.base.UnidirectionalViewModel import ir.composenews.uimarket.model.MarketModel diff --git a/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsDetail.kt b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MarketDetail.kt similarity index 95% rename from app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsDetail.kt rename to app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MarketDetail.kt index c8cf2642..dcd590be 100644 --- a/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsDetail.kt +++ b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MarketDetail.kt @@ -6,6 +6,7 @@ import android.os.Parcelable import androidx.navigation.NavBackStackEntry import androidx.navigation.NavGraphBuilder import androidx.wear.compose.navigation.composable +import ir.composenews.appwatch.navigation.MainContract import ir.composenews.appwatch.ui.details.MarketDetailWearRoute import ir.composenews.uimarket.model.MarketModel diff --git a/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsList.kt b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MarketList.kt similarity index 100% rename from app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsList.kt rename to app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MarketList.kt diff --git a/library/navigation/src/main/java/ir/composenews/navigation/graph/FavoriteNews.kt b/library/navigation/src/main/java/ir/composenews/navigation/graph/FavoriteMarketList.kt similarity index 100% rename from library/navigation/src/main/java/ir/composenews/navigation/graph/FavoriteNews.kt rename to library/navigation/src/main/java/ir/composenews/navigation/graph/FavoriteMarketList.kt diff --git a/library/navigation/src/main/java/ir/composenews/navigation/graph/NewsDetail.kt b/library/navigation/src/main/java/ir/composenews/navigation/graph/MarketDetail.kt similarity index 100% rename from library/navigation/src/main/java/ir/composenews/navigation/graph/NewsDetail.kt rename to library/navigation/src/main/java/ir/composenews/navigation/graph/MarketDetail.kt diff --git a/library/navigation/src/main/java/ir/composenews/navigation/graph/NewsList.kt b/library/navigation/src/main/java/ir/composenews/navigation/graph/MarketList.kt similarity index 100% rename from library/navigation/src/main/java/ir/composenews/navigation/graph/NewsList.kt rename to library/navigation/src/main/java/ir/composenews/navigation/graph/MarketList.kt From a58356d9684e677480f11a748d091739edb563ab Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Sat, 28 Sep 2024 12:50:34 +0330 Subject: [PATCH 57/65] [ui] Update MarketItem previews to use ComposeNewsTheme Updated the `MarketItem` and `ShimmerMarketItem` previews to use the `Compose NewsTheme` for consistent styling. This ensures that the previews reflect the actual app's appearance and improves visual consistency. --- .../composenews/ComposeNewsWearApplication.kt | 8 +--- .../appwatch/ui/list/MarketItem.kt | 45 ++++++++++++------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/app-watch/app/src/main/java/ir/composenews/ComposeNewsWearApplication.kt b/app-watch/app/src/main/java/ir/composenews/ComposeNewsWearApplication.kt index 32204a3a..a716208e 100644 --- a/app-watch/app/src/main/java/ir/composenews/ComposeNewsWearApplication.kt +++ b/app-watch/app/src/main/java/ir/composenews/ComposeNewsWearApplication.kt @@ -4,10 +4,4 @@ import android.app.Application import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp -class ComposeNewsWearApplication : Application() { - - override fun onCreate() { - super.onCreate() - } - -} \ No newline at end of file +class ComposeNewsWearApplication : Application() \ No newline at end of file diff --git a/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt b/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt index 8919508e..fe212c01 100644 --- a/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt +++ b/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt @@ -35,6 +35,7 @@ import com.google.android.horologist.compose.layout.ScalingLazyColumnDefaults import com.google.android.horologist.compose.layout.rememberResponsiveColumnState import ir.composenews.designsystem.R import ir.composenews.designsystem.component.shimmerEffect +import ir.composenews.designsystem.theme.ComposeNewsTheme import ir.composenews.designsystem.theme.darkDownTrendRed import ir.composenews.designsystem.theme.darkUptrendGreen import ir.composenews.designsystem.theme.lightDownTrendRed @@ -151,23 +152,6 @@ private fun ArrowIconUpOrDown(priceChangePercentage24h: String, tint: Color) { ) } -@Preview(device = WearDevices.LARGE_ROUND, showSystemUi = true) -@Composable -private fun MarketItemPrev() { - MaterialTheme { - MarketItem( - modifier = Modifier, - name = "Polkad", - symbol = "NEARF", - urlToImage = "", - price = "100000", - priceChangePercentage24h = "100000", - onItemClick = {}, - ) - } -} - -@Preview(device = WearDevices.LARGE_ROUND, showSystemUi = true) @Composable private fun ShimmerMarketItem() { Card( @@ -222,3 +206,30 @@ fun ShimmerMarketListItem() { } } } + +@Preview( + device = WearDevices.LARGE_ROUND, + showSystemUi = true, +) +@Composable +private fun MarketItemPrev() { + ComposeNewsTheme { + MarketItem( + modifier = Modifier, + name = "Polkad", + symbol = "NEARF", + urlToImage = "", + price = "100000", + priceChangePercentage24h = "100000", + onItemClick = {}, + ) + } +} + +@Preview(device = WearDevices.LARGE_ROUND, showSystemUi = true) +@Composable +private fun ShimmerMarketItemPrev() { + ComposeNewsTheme { + ShimmerMarketItem() + } +} \ No newline at end of file From b1a83d8a0581646f8c638cc162944d1ba92c49fa Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Sat, 28 Sep 2024 12:59:46 +0330 Subject: [PATCH 58/65] [refactor] Update architecture diagram Update the architecture diagram in the README.md file. --- README.md | 2 +- asset/arch.jpg | Bin 103364 -> 0 bytes asset/architecture.jpg | Bin 0 -> 98401 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 asset/arch.jpg create mode 100644 asset/architecture.jpg diff --git a/README.md b/README.md index 93188953..99c62e58 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Check the apk [from here](asset/app_v1.0.0.apk) ## ⚙️ Architecture -![Architecture diagram](asset/arch.jpg) +![Architecture diagram](asset/architecture.jpg) The main architecture of code based on MVI + CLEAN architecture. The division criteria is a hybrid strategy based on Feature + Layer by module. For the detail of architecture, please read [this article](https://medium.com/@kaaveh/migrate-from-mvvm-to-mvi-f938c27c214f). diff --git a/asset/arch.jpg b/asset/arch.jpg deleted file mode 100644 index 2ea6d1a0c6a3b98158010f34ecb59929132c65dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103364 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 |ZI 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 aeJ$<4;eUsM%m4fEXI1cD3LWJ5HTE|@=Wwq8 diff --git a/asset/architecture.jpg b/asset/architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a65a78f96188a816995653343a3d38f12a1bddc5 GIT binary patch literal 98401 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 ms?wY?OE8F)YQyb2 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 Date: Sat, 28 Sep 2024 13:01:51 +0330 Subject: [PATCH 59/65] Add extra blank line in MarketItem.kt for ktlint --- .../src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt b/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt index fe212c01..3b460016 100644 --- a/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt +++ b/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt @@ -232,4 +232,4 @@ private fun ShimmerMarketItemPrev() { ComposeNewsTheme { ShimmerMarketItem() } -} \ No newline at end of file +} From d200ded77b67ac0abea89fb65be1d3c6254e4429 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Sat, 28 Sep 2024 13:20:07 +0330 Subject: [PATCH 60/65] Only run Danger checks on PRs from the same repository This commit modifies the Danger checks workflow to only run on pull requests originating from the same repository. This prevents unnecessary checks on forks. --- .github/workflows/danger_checks.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/danger_checks.yml b/.github/workflows/danger_checks.yml index db28ee84..f9870a72 100644 --- a/.github/workflows/danger_checks.yml +++ b/.github/workflows/danger_checks.yml @@ -8,6 +8,7 @@ on: jobs: danger: runs-on: ubuntu-latest + if: github.event.pull_request.head.repo.full_name == github.repository steps: - name: Checkout uses: actions/checkout@v4 From 55be3b2ca10d055d27e1dd9fcd0435d6dff4c70a Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Sun, 6 Oct 2024 13:37:20 +0330 Subject: [PATCH 61/65] [refactor] update dependencies --- gradle/libs.versions.toml | 14 +++++++------- gradle/wrapper/gradle-wrapper.properties | 3 +-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5f0468e2..3b771a99 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,11 +15,11 @@ androidGradlePlugin = "8.6.1" ktx = "1.13.1" -composeBOM = "2024.09.01" +composeBOM = "2024.09.03" composeActivity = "1.9.2" composeCoil = "2.7.0" composeMaterial3 = "1.3.0" -composeWear = "1.4.0-beta03" +composeWear = "1.4.0" wearToolingPreview = "1.0.0" horologistComposeLayout = "0.6.17" @@ -33,11 +33,11 @@ lottieAnimation = "6.3.0" coroutinesCore = "1.9.0" -lifeCycle = "2.8.5" -lifeCycleViewModelKtx = "2.8.5" -lifeCycleRuntimeCompose = "2.8.5" +lifeCycle = "2.8.6" +lifeCycleViewModelKtx = "2.8.6" +lifeCycleRuntimeCompose = "2.8.6" -navigationCompose = "2.8.0" +navigationCompose = "2.8.2" retrofit = "2.11.0" loggingInterceptor = "4.12.0" @@ -54,7 +54,7 @@ mockitoKotlin = "4.1.0" mockk = "1.13.5" runner = "1.6.2" -startupRuntime = "1.1.1" +startupRuntime = "1.2.0" workRuntimeKtx = "2.9.1" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4c968e75..709dee45 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Sat Dec 10 12:00:36 IRST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From e9fa6c5d914dbfa94fcb700da4ed75c795936861 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Sun, 6 Oct 2024 14:11:18 +0330 Subject: [PATCH 62/65] [refactor] replace `quadraticBezierTo` with `quadraticTo` --- .../java/ir/composenews/designsystem/component/QuadLineChart.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt b/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt index 184eabdb..8f17062f 100644 --- a/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt +++ b/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt @@ -110,7 +110,7 @@ fun QuadLineChart( } else { medX = (x1 + x2) / 2f medY = (y1 + y2) / 2f - quadraticBezierTo(x1 = x1, y1 = y1, x2 = medX, y2 = medY) + quadraticTo(x1 = x1, y1 = y1, x2 = medX, y2 = medY) } } } From ec091dc41a10f92778fac9e4333d7e91e2db9e00 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Sun, 6 Oct 2024 14:11:57 +0330 Subject: [PATCH 63/65] [refactor] remove `buildconfig` from `gradle.properties` --- gradle.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 469ebabc..941f94ba 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,5 +24,4 @@ android.nonTransitiveRClass=true org.gradle.parallel=true org.gradle.daemon=true org.gradle.unsafe.configuration-cache=false -android.defaults.buildfeatures.buildconfig=true android.nonFinalResIds=false \ No newline at end of file From 016277ba308a77163b0bb6c13c21e03975dbc504 Mon Sep 17 00:00:00 2001 From: "r.zarchi" Date: Sun, 13 Oct 2024 17:52:44 +0330 Subject: [PATCH 64/65] implemented new method for adaptive layouts --- app/build.gradle.kts | 2 + .../navigation/ComposeNewsNavHost.kt | 53 ----- .../java/ir/composenews/ui/ComposeNewsApp.kt | 182 +++++------------- .../java/ir/composenews/ui/MainActivity.kt | 60 +----- .../java/ir/composenews/ui/MainViewModel.kt | 45 ----- .../ui/component/BottomNavigationBar.kt | 39 ---- .../ui/component/NavigationRail.kt | 41 ---- .../composenews/uimarket/model/MarketModel.kt | 40 +++- .../marketlist/MarketListScreen.kt | 15 -- gradle/libs.versions.toml | 3 + library/navigation/build.gradle.kts | 2 + .../ir/composenews/navigation/MainContract.kt | 18 -- .../navigation/graph/FavoriteMarketList.kt | 48 ----- .../navigation/graph/ListWithDetailScreen.kt | 52 +++++ .../navigation/graph/MarketDetail.kt | 41 ---- .../navigation/graph/MarketList.kt | 116 ----------- 16 files changed, 148 insertions(+), 609 deletions(-) delete mode 100644 app/src/main/java/ir/composenews/navigation/ComposeNewsNavHost.kt delete mode 100644 app/src/main/java/ir/composenews/ui/MainViewModel.kt delete mode 100644 app/src/main/java/ir/composenews/ui/component/BottomNavigationBar.kt delete mode 100644 app/src/main/java/ir/composenews/ui/component/NavigationRail.kt delete mode 100644 library/navigation/src/main/java/ir/composenews/navigation/MainContract.kt delete mode 100644 library/navigation/src/main/java/ir/composenews/navigation/graph/FavoriteMarketList.kt create mode 100644 library/navigation/src/main/java/ir/composenews/navigation/graph/ListWithDetailScreen.kt delete mode 100644 library/navigation/src/main/java/ir/composenews/navigation/graph/MarketDetail.kt delete mode 100644 library/navigation/src/main/java/ir/composenews/navigation/graph/MarketList.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 28ac6a91..c3e94a29 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -48,6 +48,8 @@ dependencies { implementation(lifecycle.runtime.ktx) implementation(work.runtime.ktx) implementation(hilt.navigation.compose) + implementation(compose.material3.adaptive.navigation.suite) + implementation(compose.material3.adaptive.navigation) implementation(espresso.core) implementation(compose.ui.test.manifest) implementation(compose.ui.test.junit4) diff --git a/app/src/main/java/ir/composenews/navigation/ComposeNewsNavHost.kt b/app/src/main/java/ir/composenews/navigation/ComposeNewsNavHost.kt deleted file mode 100644 index f720170d..00000000 --- a/app/src/main/java/ir/composenews/navigation/ComposeNewsNavHost.kt +++ /dev/null @@ -1,53 +0,0 @@ -package ir.composenews.navigation - -import androidx.compose.animation.EnterTransition -import androidx.compose.animation.ExitTransition -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.navigation.NavHostController -import androidx.navigation.compose.NavHost -import androidx.window.layout.DisplayFeature -import ir.composenews.navigation.graph.favoriteList -import ir.composenews.navigation.graph.marketDetail -import ir.composenews.navigation.graph.marketList -import ir.composenews.uimarket.model.MarketModel -import ir.composenews.utils.ContentType -import kotlinx.collections.immutable.PersistentList - -@Composable -fun ComposeNewsNavHost( - navController: NavHostController, - modifier: Modifier, - contentType: ContentType, - displayFeatures: PersistentList, - onMarketSelected: ((MarketModel, ContentType) -> Unit)? = null, - closeDetailScreen: () -> Unit, - uiState: MainContract.State -) { - NavHost( - navController = navController, - startDestination = Destinations.MarketListScreen.route, - modifier = modifier, - enterTransition = { EnterTransition.None }, - exitTransition = { ExitTransition.None }, - ) { - marketList( - displayFeature = displayFeatures, - contentType = contentType, - showFavorite = false, - onMarketSelected = onMarketSelected, - closeDetailScreen = closeDetailScreen, - uiState = uiState - ) - favoriteList( - displayFeature = displayFeatures, - contentType = contentType, - onMarketSelected = onMarketSelected, - closeDetailScreen = closeDetailScreen, - uiState = uiState - ) - marketDetail( - uiState = uiState, - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/ir/composenews/ui/ComposeNewsApp.kt b/app/src/main/java/ir/composenews/ui/ComposeNewsApp.kt index 419e054b..3b97d279 100644 --- a/app/src/main/java/ir/composenews/ui/ComposeNewsApp.kt +++ b/app/src/main/java/ir/composenews/ui/ComposeNewsApp.kt @@ -1,116 +1,31 @@ package ir.composenews.ui -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Favorite import androidx.compose.material.icons.filled.Home +import androidx.compose.material3.Icon import androidx.compose.material3.Scaffold -import androidx.compose.material3.windowsizeclass.WindowSizeClass -import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass +import androidx.compose.material3.Text +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator +import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffold +import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffoldDefaults import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.navigation.compose.currentBackStackEntryAsState -import androidx.navigation.compose.rememberNavController -import androidx.window.layout.DisplayFeature -import androidx.window.layout.FoldingFeature import ir.composenews.navigation.BottomNavItem -import ir.composenews.navigation.ComposeNewsNavHost import ir.composenews.navigation.Destinations -import ir.composenews.navigation.MainContract -import ir.composenews.ui.component.BottomNavigationBar -import ir.composenews.ui.component.ComposeNewsNavigationRail -import ir.composenews.uimarket.model.MarketModel -import ir.composenews.utils.ContentType -import ir.composenews.utils.DevicePosture -import ir.composenews.utils.NavigationType -import ir.composenews.utils.isBookPosture -import ir.composenews.utils.isSeparating -import kotlinx.collections.immutable.PersistentList +import ir.composenews.navigation.graph.ListWithDetailScreen import kotlinx.collections.immutable.persistentListOf +@OptIn(ExperimentalMaterial3AdaptiveApi::class) @Composable -fun ComposeNewsApp( - windowSize: WindowSizeClass, - displayFeatures: PersistentList, - onMarketSelected: ((MarketModel, ContentType) -> Unit)? = null, - closeDetailScreen: () -> Unit, - uiState: MainContract.State -) { - - /** - * This will help us select type of navigation and content type depending on window size and - * fold state of the device. - */ - val navigationType: NavigationType - val contentType: ContentType - - /** - * We are using display's folding features to map the device postures a fold is in. - * In the state of folding device If it's half fold in BookPosture we want to avoid content - * at the crease/hinge - */ - val foldingFeature = displayFeatures.filterIsInstance().firstOrNull() - val foldingDevicePosture = when { - isBookPosture(foldingFeature) -> - DevicePosture.BookPosture(foldingFeature.bounds) - - isSeparating(foldingFeature) -> - DevicePosture.Separating(foldingFeature.bounds, foldingFeature.orientation) - - else -> DevicePosture.NormalPosture - } - - when (windowSize.widthSizeClass) { - WindowWidthSizeClass.Compact -> { - navigationType = NavigationType.BOTTOM_NAVIGATION - contentType = ContentType.SINGLE_PANE - } - - WindowWidthSizeClass.Medium -> { - navigationType = NavigationType.NAVIGATION_RAIL - contentType = if (foldingDevicePosture != DevicePosture.NormalPosture) { - ContentType.DUAL_PANE - } else { - ContentType.SINGLE_PANE - } - } - - WindowWidthSizeClass.Expanded -> { - navigationType = NavigationType.NAVIGATION_RAIL - contentType = ContentType.DUAL_PANE - } - - else -> { - navigationType = NavigationType.BOTTOM_NAVIGATION - contentType = ContentType.SINGLE_PANE - } - } - - ComposeNewsAppWrapper( - navigationType = navigationType, - contentType = contentType, - displayFeatures = displayFeatures, - onMarketSelected = onMarketSelected, - closeDetailScreen = closeDetailScreen, - uiState = uiState - ) - -} - -@Composable -fun ComposeNewsAppWrapper( - navigationType: NavigationType, - contentType: ContentType, - displayFeatures: PersistentList, - onMarketSelected: ((MarketModel, ContentType) -> Unit)? = null, - closeDetailScreen: () -> Unit, - uiState: MainContract.State -) { +fun ComposeNewsApp() { val items = remember { persistentListOf( BottomNavItem( @@ -126,47 +41,48 @@ fun ComposeNewsAppWrapper( ) } - val navController = rememberNavController() - val backStackEntry = navController.currentBackStackEntryAsState() - val currentScreenRoute = backStackEntry.value?.destination?.route - val bottomNavVisible = - navigationType == NavigationType.BOTTOM_NAVIGATION && !uiState.isDetailOnlyOpen - + var currentRoute by remember { mutableStateOf(Destinations.MarketListScreen.route) } Scaffold { paddingValues -> - Row( - modifier = Modifier.padding(paddingValues) + NavigationSuiteScaffold( + navigationSuiteItems = { + items.forEach { item -> + item(selected = item.route == currentRoute, onClick = { + currentRoute = item.route + }, icon = { + Icon( + imageVector = item.icon, + contentDescription = item.name, + ) + }, label = { + Text( + text = item.name, + ) + }) + } + }, + layoutType = NavigationSuiteScaffoldDefaults.calculateFromAdaptiveInfo( + currentWindowAdaptiveInfo() + ) ) { - AnimatedVisibility(visible = navigationType == NavigationType.NAVIGATION_RAIL) { - ComposeNewsNavigationRail( - items = items, - currentScreenRoute = currentScreenRoute, - onItemClick = { navController.navigate(it.route) }) - } - Column( - modifier = Modifier - .fillMaxSize() - ) { - ComposeNewsNavHost( - modifier = Modifier - .weight(1f) - .padding(bottom = paddingValues.calculateBottomPadding()), - navController = navController, - contentType = contentType, - displayFeatures = displayFeatures, - onMarketSelected = onMarketSelected, - closeDetailScreen = closeDetailScreen, - uiState = uiState - ) - AnimatedVisibility(visible = bottomNavVisible) { - BottomNavigationBar( - items = items, - currentScreenRoute = currentScreenRoute, - onItemClick = { navController.navigate(it.route) } + val navigator = rememberListDetailPaneScaffoldNavigator() + when (currentRoute) { + Destinations.MarketListScreen.route -> { + ListWithDetailScreen( + Modifier.padding(paddingValues), + navigator, + showFavorite = false, ) } - } + Destinations.FavoriteMarketScreen.route -> { + ListWithDetailScreen( + Modifier.padding(paddingValues), + navigator, + showFavorite = true, + ) + } + } } } } \ No newline at end of file diff --git a/app/src/main/java/ir/composenews/ui/MainActivity.kt b/app/src/main/java/ir/composenews/ui/MainActivity.kt index 85367b58..6a2f4e2a 100644 --- a/app/src/main/java/ir/composenews/ui/MainActivity.kt +++ b/app/src/main/java/ir/composenews/ui/MainActivity.kt @@ -3,32 +3,17 @@ package ir.composenews.ui import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.activity.viewModels -import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi -import androidx.compose.material3.windowsizeclass.WindowSizeClass -import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.DpSize -import androidx.compose.ui.unit.dp -import com.google.accompanist.adaptive.calculateDisplayFeatures import dagger.hilt.android.AndroidEntryPoint import ir.composenews.designsystem.theme.ComposeNewsTheme -import ir.composenews.navigation.MainContract import ir.composenews.permission.enum.PermissionType import ir.composenews.permission.manager.PermissionManager import ir.composenews.permission.manager.PermissionManagerImpl -import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList @AndroidEntryPoint class MainActivity : ComponentActivity(), PermissionManager by PermissionManagerImpl() { - - private val viewModel: MainViewModel by viewModels() - - @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -39,96 +24,53 @@ class MainActivity : ComponentActivity(), PermissionManager by PermissionManager setContent { ComposeNewsTheme { - - val windowSize = calculateWindowSizeClass(this) - val displayFeatures = calculateDisplayFeatures(this) - val uiState = viewModel.state.collectAsState() - - ComposeNewsApp( - windowSize = windowSize, - displayFeatures = displayFeatures.toPersistentList(), - uiState = uiState.value, - closeDetailScreen = { viewModel.closeDetailScreen() }, - onMarketSelected = { market, contentType -> - viewModel.event( - MainContract.Event.SetMarket( - market = market, - contentType = contentType - ) - ) - } - ) + ComposeNewsApp() } } } } -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Preview(showBackground = true) @Composable fun ComposeNewsAppPreview() { ComposeNewsTheme { ComposeNewsApp( - windowSize = WindowSizeClass.calculateFromSize(DpSize(400.dp, 900.dp)), - displayFeatures = persistentListOf(), - uiState = MainContract.State(), - closeDetailScreen = {}, ) } } -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Preview(showBackground = true, widthDp = 700, heightDp = 500) @Composable fun ComposeNewsAppPreviewTablet() { ComposeNewsTheme { ComposeNewsApp( - windowSize = WindowSizeClass.calculateFromSize(DpSize(700.dp, 500.dp)), - displayFeatures = persistentListOf(), - uiState = MainContract.State(), - closeDetailScreen = {}, ) } } -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Preview(showBackground = true, widthDp = 500, heightDp = 700) @Composable fun ComposeNewsAppPreviewTabletPortrait() { ComposeNewsTheme { ComposeNewsApp( - windowSize = WindowSizeClass.calculateFromSize(DpSize(500.dp, 700.dp)), - displayFeatures = persistentListOf(), - uiState = MainContract.State(), - closeDetailScreen = {}, ) } } -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Preview(showBackground = true, widthDp = 1100, heightDp = 600) @Composable fun ComposeNewsAppPreviewDesktop() { ComposeNewsTheme { ComposeNewsApp( - windowSize = WindowSizeClass.calculateFromSize(DpSize(1100.dp, 600.dp)), - displayFeatures = persistentListOf(), - uiState = MainContract.State(), - closeDetailScreen = {}, ) } } -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Preview(showBackground = true, widthDp = 600, heightDp = 1100) @Composable fun ComposeNewsAppPreviewDesktopPortrait() { ComposeNewsTheme { ComposeNewsApp( - windowSize = WindowSizeClass.calculateFromSize(DpSize(600.dp, 1100.dp)), - displayFeatures = persistentListOf(), - uiState = MainContract.State(), - closeDetailScreen = {}, ) } } \ No newline at end of file diff --git a/app/src/main/java/ir/composenews/ui/MainViewModel.kt b/app/src/main/java/ir/composenews/ui/MainViewModel.kt deleted file mode 100644 index 7c67be49..00000000 --- a/app/src/main/java/ir/composenews/ui/MainViewModel.kt +++ /dev/null @@ -1,45 +0,0 @@ -package ir.composenews.ui - -import androidx.lifecycle.viewModelScope -import dagger.hilt.android.lifecycle.HiltViewModel -import ir.composenews.base.BaseViewModel -import ir.composenews.core_test.dispatcher.DispatcherProvider -import ir.composenews.navigation.MainContract -import ir.composenews.uimarket.model.MarketModel -import ir.composenews.utils.ContentType -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch -import javax.inject.Inject - -@HiltViewModel -class MainViewModel @Inject constructor( - dispatcherProvider: DispatcherProvider, -) : BaseViewModel(dispatcherProvider), MainContract { - - private val mutableState = MutableStateFlow(MainContract.State()) - override val state: StateFlow = mutableState.asStateFlow() - override fun event(event: MainContract.Event) { - when (event) { - is MainContract.Event.SetMarket -> setMarket(event.market, event.contentType) - } - } - - private fun setMarket(market: MarketModel?, contentType: ContentType) = viewModelScope.launch { - mutableState.emit( - mutableState.value.copy( - market, - isDetailOnlyOpen = contentType == ContentType.SINGLE_PANE - ) - ) - } - - fun closeDetailScreen() = viewModelScope.launch { - mutableState.emit( - mutableState.value.copy( - isDetailOnlyOpen = false - ) - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/ir/composenews/ui/component/BottomNavigationBar.kt b/app/src/main/java/ir/composenews/ui/component/BottomNavigationBar.kt deleted file mode 100644 index 1a744cd9..00000000 --- a/app/src/main/java/ir/composenews/ui/component/BottomNavigationBar.kt +++ /dev/null @@ -1,39 +0,0 @@ -package ir.composenews.ui.component - -import androidx.compose.material3.NavigationBar -import androidx.compose.material3.NavigationBarItem -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import ir.composenews.designsystem.component.BottomNavigationIcon -import ir.composenews.navigation.BottomNavItem -import kotlinx.collections.immutable.PersistentList - -@Composable -fun BottomNavigationBar( - items: PersistentList, - currentScreenRoute: String?, - modifier: Modifier = Modifier, - onItemClick: (BottomNavItem) -> Unit -) { - NavigationBar( - modifier = modifier, - tonalElevation = 15.dp - ) { - items.forEach { item -> - val selected = item.route == currentScreenRoute - NavigationBarItem( - selected = selected, - onClick = { onItemClick(item) }, - icon = { - BottomNavigationIcon( - name = item.name, - icon = item.icon, - selected = selected, - badgeCount = item.badgeCount, - ) - } - ) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/ir/composenews/ui/component/NavigationRail.kt b/app/src/main/java/ir/composenews/ui/component/NavigationRail.kt deleted file mode 100644 index ced15831..00000000 --- a/app/src/main/java/ir/composenews/ui/component/NavigationRail.kt +++ /dev/null @@ -1,41 +0,0 @@ -package ir.composenews.ui.component - -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.NavigationRail -import androidx.compose.material3.NavigationRailItem -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import ir.composenews.designsystem.component.BottomNavigationIcon -import ir.composenews.navigation.BottomNavItem -import kotlinx.collections.immutable.PersistentList - -@Composable -fun ComposeNewsNavigationRail( - items: PersistentList, - currentScreenRoute: String?, - modifier: Modifier = Modifier, - onItemClick: (BottomNavItem) -> Unit -) { - NavigationRail( - modifier = modifier.fillMaxHeight() - .padding(end = 30.dp), - ) { - items.forEach { item -> - val selected = item.route == currentScreenRoute - NavigationRailItem( - selected = selected, - onClick = { onItemClick(item) }, - icon = { - BottomNavigationIcon( - name = item.name, - icon = item.icon, - selected = selected, - badgeCount = item.badgeCount, - ) - } - ) - } - } -} \ No newline at end of file diff --git a/core/uimarket/src/main/java/ir/composenews/uimarket/model/MarketModel.kt b/core/uimarket/src/main/java/ir/composenews/uimarket/model/MarketModel.kt index a5f332de..a89a374f 100644 --- a/core/uimarket/src/main/java/ir/composenews/uimarket/model/MarketModel.kt +++ b/core/uimarket/src/main/java/ir/composenews/uimarket/model/MarketModel.kt @@ -1,5 +1,8 @@ package ir.composenews.uimarket.model +import android.os.Parcel +import android.os.Parcelable + data class MarketModel( val id: String, val name: String, @@ -8,4 +11,39 @@ data class MarketModel( val priceChangePercentage24h: Double, val imageUrl: String, val isFavorite: Boolean = false, -) +) : Parcelable { + constructor(parcel: Parcel) : this( + parcel.readString().orEmpty(), + parcel.readString().orEmpty(), + parcel.readString().orEmpty(), + parcel.readDouble(), + parcel.readDouble(), + parcel.readString().orEmpty(), + parcel.readByte() != 0.toByte(), + ) { + } + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeString(id) + parcel.writeString(name) + parcel.writeString(symbol) + parcel.writeDouble(currentPrice) + parcel.writeDouble(priceChangePercentage24h) + parcel.writeString(imageUrl) + parcel.writeByte(if (isFavorite) 1 else 0) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): MarketModel { + return MarketModel(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } +} diff --git a/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListScreen.kt b/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListScreen.kt index c2ae865a..35cad8a1 100644 --- a/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListScreen.kt +++ b/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListScreen.kt @@ -33,7 +33,6 @@ import ir.composenews.designsystem.theme.ComposeNewsTheme import ir.composenews.marketlist.component.MarketListItem import ir.composenews.marketlist.preview_provider.MarketListStateProvider import ir.composenews.uimarket.model.MarketModel -import ir.composenews.utils.ContentType /** * LongParameterList - > compose unimited @@ -42,11 +41,7 @@ import ir.composenews.utils.ContentType fun MarketListRoute( viewModel: MarketListViewModel = hiltViewModel(), showFavoriteList: Boolean = false, - isDetailOnlyOpen: Boolean, - marketModel: MarketModel?, - closeDetailScreen: () -> Unit, onNavigateToDetailScreen: (market: MarketModel) -> Unit, - contentType: ContentType, ) { val (state, event) = use(viewModel = viewModel) LaunchedEffect(key1 = Unit) { @@ -56,16 +51,6 @@ fun MarketListRoute( } } - LaunchedEffect(key1 = contentType) { - if (contentType == ContentType.SINGLE_PANE && !isDetailOnlyOpen) { - closeDetailScreen() - } - } - - if (contentType == ContentType.DUAL_PANE && !state.refreshing && state.marketList.isNotEmpty() && marketModel == null) { - onNavigateToDetailScreen(state.marketList[0]) - } - BaseRoute( baseViewModel = viewModel, shimmerView = { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3b771a99..2cbe0d2c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,6 +19,7 @@ composeBOM = "2024.09.03" composeActivity = "1.9.2" composeCoil = "2.7.0" composeMaterial3 = "1.3.0" +material3Adaptive = "1.0.0" composeWear = "1.4.0" wearToolingPreview = "1.0.0" horologistComposeLayout = "0.6.17" @@ -80,6 +81,8 @@ compose-runtime = { group = "androidx.compose.runtime", name = "runtime" } compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "composeMaterial3" } compose-activity = { group = "androidx.activity", name = "activity-compose", version.ref = "composeActivity" } compose-coil = { group = "io.coil-kt", name = "coil-compose", version.ref = "composeCoil" } +compose-material3-adaptive-navigation = { group = "androidx.compose.material3.adaptive", name = "adaptive-navigation", version.ref = "material3Adaptive" } +compose-material3-adaptive-navigation-suite = { group = "androidx.compose.material3", name = "material3-adaptive-navigation-suite", version.ref = "composeMaterial3" } compose-material-wear = { group = "androidx.wear.compose", name = "compose-material", version.ref = "composeWear" } compose-foundation-wear = { group = "androidx.wear.compose", name = "compose-foundation", version.ref = "composeWear" } compose-ui-preview-wear = { group = "androidx.wear", name = "wear-tooling-preview", version.ref = "wearToolingPreview" } diff --git a/library/navigation/build.gradle.kts b/library/navigation/build.gradle.kts index d61927f9..78d75caf 100644 --- a/library/navigation/build.gradle.kts +++ b/library/navigation/build.gradle.kts @@ -15,4 +15,6 @@ dependencies { implementation(domain.market) } api(libs.navigation.compose) + implementation(libs.compose.material3.adaptive.navigation) + implementation(libs.compose.material3.adaptive.navigation.suite) } \ No newline at end of file diff --git a/library/navigation/src/main/java/ir/composenews/navigation/MainContract.kt b/library/navigation/src/main/java/ir/composenews/navigation/MainContract.kt deleted file mode 100644 index 7dec4cd0..00000000 --- a/library/navigation/src/main/java/ir/composenews/navigation/MainContract.kt +++ /dev/null @@ -1,18 +0,0 @@ -package ir.composenews.navigation - -import ir.composenews.base.UnidirectionalViewModel -import ir.composenews.uimarket.model.MarketModel -import ir.composenews.utils.ContentType - -interface MainContract : - UnidirectionalViewModel { - - data class State( - val market: MarketModel? = null, - val isDetailOnlyOpen: Boolean = false, - ) - - sealed class Event { - data class SetMarket(val market: MarketModel?, val contentType: ContentType) : Event() - } -} diff --git a/library/navigation/src/main/java/ir/composenews/navigation/graph/FavoriteMarketList.kt b/library/navigation/src/main/java/ir/composenews/navigation/graph/FavoriteMarketList.kt deleted file mode 100644 index 560a605f..00000000 --- a/library/navigation/src/main/java/ir/composenews/navigation/graph/FavoriteMarketList.kt +++ /dev/null @@ -1,48 +0,0 @@ -@file:Suppress("ImportOrdering") - -package ir.composenews.navigation.graph - -import androidx.navigation.NavGraphBuilder -import androidx.navigation.compose.composable -import androidx.window.layout.DisplayFeature -import ir.composenews.navigation.Destinations -import ir.composenews.navigation.MainContract -import ir.composenews.navigation.extension_function.parcelableData -import ir.composenews.uimarket.model.MarketModel -import ir.composenews.utils.ContentType -import kotlinx.collections.immutable.PersistentList - -fun NavGraphBuilder.favoriteList( - contentType: ContentType, - displayFeature: PersistentList, - uiState: MainContract.State, - closeDetailScreen: () -> Unit, - onMarketSelected: ((MarketModel, ContentType) -> Unit)? = null, -) { - composable(Destinations.FavoriteMarketScreen.route) { entry -> - when (contentType) { - ContentType.SINGLE_PANE -> SingleListScreen( - showFavorite = true, - uiState = uiState, - onMarketSelected = onMarketSelected, - closeDetailScreen = closeDetailScreen, - contentType = contentType, - ) - - ContentType.DUAL_PANE -> { - val market = - entry.parcelableData(Destinations.MarketDetailScreen().market) - ?: uiState.market - ListWithDetailScreen( - displayFeatures = displayFeature, - market = market, - showFavorite = true, - uiState = uiState, - onMarketSelected = onMarketSelected, - closeDetailScreen = closeDetailScreen, - contentType = contentType, - ) - } - } - } -} diff --git a/library/navigation/src/main/java/ir/composenews/navigation/graph/ListWithDetailScreen.kt b/library/navigation/src/main/java/ir/composenews/navigation/graph/ListWithDetailScreen.kt new file mode 100644 index 00000000..6f98c4de --- /dev/null +++ b/library/navigation/src/main/java/ir/composenews/navigation/graph/ListWithDetailScreen.kt @@ -0,0 +1,52 @@ +package ir.composenews.navigation.graph + +import androidx.compose.foundation.layout.Box +import androidx.compose.material3.Text +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole +import androidx.compose.material3.adaptive.navigation.NavigableListDetailPaneScaffold +import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import ir.composenews.marketdetail.MarketDetailRoute +import ir.composenews.marketlist.MarketListRoute +import ir.composenews.uimarket.model.MarketModel + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +@Composable +fun ListWithDetailScreen( + modifier: Modifier = Modifier, + navigator: ThreePaneScaffoldNavigator, + showFavorite: Boolean, +) { + NavigableListDetailPaneScaffold( + modifier = modifier, + navigator = navigator, + listPane = { + MarketListRoute( + onNavigateToDetailScreen = { market -> + navigator.navigateTo( + pane = ListDetailPaneScaffoldRole.Detail, + content = market, + ) + }, + showFavoriteList = showFavorite, + ) + }, + detailPane = { + (navigator.currentDestination?.content as? MarketModel)?.let { content -> + MarketDetailRoute( + market = content, + ) + } ?: run { + Box( + modifier = modifier, + contentAlignment = Alignment.Center, + ) { + Text("Select item from left") + } + } + }, + ) +} diff --git a/library/navigation/src/main/java/ir/composenews/navigation/graph/MarketDetail.kt b/library/navigation/src/main/java/ir/composenews/navigation/graph/MarketDetail.kt deleted file mode 100644 index 002d2727..00000000 --- a/library/navigation/src/main/java/ir/composenews/navigation/graph/MarketDetail.kt +++ /dev/null @@ -1,41 +0,0 @@ -@file:Suppress("MagicNumber") - -package ir.composenews.navigation.graph - -import androidx.compose.animation.AnimatedContentTransitionScope -import androidx.compose.animation.core.EaseIn -import androidx.compose.animation.core.EaseOut -import androidx.compose.animation.core.tween -import androidx.navigation.NavGraphBuilder -import androidx.navigation.compose.composable -import ir.composenews.marketdetail.MarketDetailRoute -import ir.composenews.navigation.Destinations -import ir.composenews.navigation.MainContract -import ir.composenews.navigation.extension_function.parcelableData -import ir.composenews.uimarket.model.MarketModel - -fun NavGraphBuilder.marketDetail( - uiState: MainContract.State, -) { - composable( - route = Destinations.MarketDetailScreen().route, - enterTransition = { - slideIntoContainer( - animationSpec = tween(300, easing = EaseIn), - towards = AnimatedContentTransitionScope.SlideDirection.Start, - ) - }, - exitTransition = { - slideOutOfContainer( - animationSpec = tween(300, easing = EaseOut), - towards = AnimatedContentTransitionScope.SlideDirection.End, - ) - }, - ) { entry -> - val market = entry.parcelableData(Destinations.MarketDetailScreen().market) - ?: uiState.market as MarketModel - MarketDetailRoute( - market = market, - ) - } -} diff --git a/library/navigation/src/main/java/ir/composenews/navigation/graph/MarketList.kt b/library/navigation/src/main/java/ir/composenews/navigation/graph/MarketList.kt deleted file mode 100644 index 999c42c9..00000000 --- a/library/navigation/src/main/java/ir/composenews/navigation/graph/MarketList.kt +++ /dev/null @@ -1,116 +0,0 @@ -package ir.composenews.navigation.graph - -import androidx.activity.compose.BackHandler -import androidx.compose.runtime.Composable -import androidx.compose.ui.unit.dp -import androidx.navigation.NavGraphBuilder -import androidx.navigation.compose.composable -import androidx.window.layout.DisplayFeature -import com.google.accompanist.adaptive.HorizontalTwoPaneStrategy -import com.google.accompanist.adaptive.TwoPane -import ir.composenews.marketdetail.MarketDetailRoute -import ir.composenews.marketlist.MarketListRoute -import ir.composenews.navigation.Destinations -import ir.composenews.navigation.MainContract -import ir.composenews.navigation.extension_function.parcelableData -import ir.composenews.uimarket.model.MarketModel -import ir.composenews.utils.ContentType -import kotlinx.collections.immutable.PersistentList - -fun NavGraphBuilder.marketList( - showFavorite: Boolean, - contentType: ContentType, - displayFeature: PersistentList, - uiState: MainContract.State, - closeDetailScreen: () -> Unit, - onMarketSelected: ((MarketModel, ContentType) -> Unit)? = null, -) { - composable(Destinations.MarketListScreen.route) { entry -> - when (contentType) { - ContentType.SINGLE_PANE -> SingleListScreen( - showFavorite = showFavorite, - uiState = uiState, - onMarketSelected = onMarketSelected, - contentType = contentType, - closeDetailScreen = closeDetailScreen, - ) - - ContentType.DUAL_PANE -> { - val market = - entry.parcelableData(Destinations.MarketDetailScreen().market) - ?: uiState.market - ListWithDetailScreen( - displayFeatures = displayFeature, - market = market, - showFavorite = showFavorite, - uiState = uiState, - onMarketSelected = onMarketSelected, - closeDetailScreen = closeDetailScreen, - contentType = contentType, - ) - } - } - } -} - -@Composable -fun SingleListScreen( - showFavorite: Boolean, - uiState: MainContract.State, - closeDetailScreen: () -> Unit, - contentType: ContentType, - onMarketSelected: ((MarketModel, ContentType) -> Unit)? = null, -) { - if (uiState.market != null && uiState.isDetailOnlyOpen) { - BackHandler { - closeDetailScreen() - } - MarketDetailRoute( - market = uiState.market, - ) - } else { - MarketListRoute( - onNavigateToDetailScreen = { market -> - onMarketSelected?.invoke(market, contentType) - }, - isDetailOnlyOpen = uiState.isDetailOnlyOpen, - marketModel = uiState.market, - showFavoriteList = showFavorite, - closeDetailScreen = closeDetailScreen, - contentType = contentType, - ) - } -} - -@Composable -fun ListWithDetailScreen( - showFavorite: Boolean, - displayFeatures: PersistentList, - market: MarketModel?, - uiState: MainContract.State, - contentType: ContentType, - closeDetailScreen: () -> Unit, - onMarketSelected: ((MarketModel, ContentType) -> Unit)? = null, -) { - TwoPane( - first = { - MarketListRoute( - onNavigateToDetailScreen = { market -> - onMarketSelected?.invoke(market, contentType) - }, - isDetailOnlyOpen = uiState.isDetailOnlyOpen, - marketModel = uiState.market, - showFavoriteList = showFavorite, - closeDetailScreen = closeDetailScreen, - contentType = contentType, - ) - }, - second = { - MarketDetailRoute( - market = market, - ) - }, - strategy = HorizontalTwoPaneStrategy(splitFraction = 0.5f, gapWidth = 16.dp), - displayFeatures = displayFeatures, - ) -} From e1ed421e62dfc163ef52a492887da39fdd52efd3 Mon Sep 17 00:00:00 2001 From: Amirhossein <119420193+AmirMousavi-dev@users.noreply.github.com> Date: Sun, 24 Nov 2024 10:03:31 +0330 Subject: [PATCH 65/65] Add 5% upper and 2% lower padding for better chart boundaries --- .../composenews/designsystem/component/QuadLineChart.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt b/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt index 8f17062f..013d45d6 100644 --- a/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt +++ b/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt @@ -42,12 +42,14 @@ import kotlin.math.roundToInt fun QuadLineChart( data: List>, ) { - val spacing = dimensionResource(R.dimen.quad_line_chart_spacing).value // Reduced spacing to minimize horizontal padding + val spacing = + dimensionResource(R.dimen.quad_line_chart_spacing).value // Reduced spacing to minimize horizontal padding val columnTextColor = MaterialTheme.colorScheme.onSurface.toArgb() + val upperValue = remember(key1 = data) { - (data.maxOfOrNull { it.second }?.plus(1))?.roundToInt() ?: 0 + (data.maxOfOrNull { it.second }?.let { it + it * 0.05 })?.roundToInt() ?: 0 } - val lowerValue = remember(key1 = data) { (data.minOfOrNull { it.second }?.toInt() ?: 0) } + val lowerValue = remember(key1 = data) { (data.minOfOrNull { it.second }?.let { it - it * 0.02 }?.toInt() ?: 0) } val density = LocalDensity.current val textPaint = remember(density) {

_v^imDe*}^Eku-Zf#bxC!nHX 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 B_C){y literal 0 HcmV?d00001 From 9c70d69eaa3d92ecc8ae8f69b3e4d1cae5d534c3 Mon Sep 17 00:00:00 2001 From: Suat Zengin Date: Wed, 15 May 2024 00:07:59 +0300 Subject: [PATCH 02/65] Migrate remote from retrofit to ktor client --- .../java/ir/composenews/extensions/Number.kt | 2 + data/market-remote/build.gradle.kts | 8 +- .../remotedatasource/api/MarketsApi.kt | 29 ++----- .../remotedatasource/api/MarketsApiImpl.kt | 72 ++++++++++++++++ .../remotedatasource/di/ApiModule.kt | 16 ++++ .../di/RemoteDatasourceModule.kt | 82 +++++++++---------- .../remotedatasource/util/HttpRoutes.kt | 14 ++++ .../data/repository/MarketRepositoryImpl.kt | 2 +- .../marketdetail/MarketDetailLoadingView.kt | 2 + gradle/libs.versions.toml | 16 ++++ .../component/EmptyStateAnimation.kt | 2 + .../designsystem/component/MarketItem.kt | 23 ++++-- .../ir/composenews/utils/WindowStateUtils.kt | 6 +- 13 files changed, 199 insertions(+), 75 deletions(-) create mode 100644 data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt create mode 100644 data/market-remote/src/main/java/ir/composenews/remotedatasource/di/ApiModule.kt create mode 100644 data/market-remote/src/main/java/ir/composenews/remotedatasource/util/HttpRoutes.kt diff --git a/core/extensions/src/main/java/ir/composenews/extensions/Number.kt b/core/extensions/src/main/java/ir/composenews/extensions/Number.kt index 581c6d92..7471487c 100644 --- a/core/extensions/src/main/java/ir/composenews/extensions/Number.kt +++ b/core/extensions/src/main/java/ir/composenews/extensions/Number.kt @@ -1,3 +1,5 @@ +@file:Suppress("ImplicitDefaultLocale") + package ir.composenews.extensions fun Number.roundToTwoDecimalPlaces(): String { diff --git a/data/market-remote/build.gradle.kts b/data/market-remote/build.gradle.kts index 301c5cce..43283392 100644 --- a/data/market-remote/build.gradle.kts +++ b/data/market-remote/build.gradle.kts @@ -15,13 +15,11 @@ android { dependencies { libs.apply { - implementation(retrofit) - implementation(kotlinx.serialization.json) - implementation(kotlinx.serialization.converter) - implementation(logging.interceptor) - implementation(lifecycle.viewmodel.ktx) + implementation(bundles.ktor) + debugImplementation(chucker) releaseImplementation(chucker.no.op) + androidTestImplementation(runner) } } \ No newline at end of file diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt index 52d82620..c42c755c 100644 --- a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt @@ -5,32 +5,21 @@ package ir.composenews.remotedatasource.api import ir.composenews.remotedatasource.dto.MarketChartResponse import ir.composenews.remotedatasource.dto.MarketDetailResponse import ir.composenews.remotedatasource.dto.MarketResponse -import retrofit2.http.GET -import retrofit2.http.Path -import retrofit2.http.Query interface MarketsApi { - - @GET("coins/markets") suspend fun getMarkets( - @Query("vs_currency") currency: String, - @Query("order") order: String, - @Query("per_page") perPage: Int, - @Query("page") page: Int, - @Query("sparkline") sparkline: Boolean, + currency: String, + order: String, + perPage: Int, + page: Int, + sparkline: Boolean, ): List - @GET("coins/{id}/market_chart") suspend fun getMarketChart( - @Path("id") id: String, - @Query("vs_currency") currency: String, - @Query("days") days: Int, + id: String, + currency: String, + days: Int, ): MarketChartResponse - @GET("coins/{id}") - suspend fun getMarketDetail( - @Path("id") id: String, - ): MarketDetailResponse + suspend fun getMarketDetail(id: String): MarketDetailResponse } - -internal const val BASE_URL = "https://api.coingecko.com/api/v3/" diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt new file mode 100644 index 00000000..a858a1e2 --- /dev/null +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt @@ -0,0 +1,72 @@ +package ir.composenews.remotedatasource.api + +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.get +import io.ktor.http.appendPathSegments +import ir.composenews.remotedatasource.dto.MarketChartResponse +import ir.composenews.remotedatasource.dto.MarketDetailResponse +import ir.composenews.remotedatasource.dto.MarketResponse +import ir.composenews.remotedatasource.util.HttpRoutes.COINS +import ir.composenews.remotedatasource.util.HttpRoutes.DAYS +import ir.composenews.remotedatasource.util.HttpRoutes.MARKETS +import ir.composenews.remotedatasource.util.HttpRoutes.MARKET_CHART +import ir.composenews.remotedatasource.util.HttpRoutes.ORDER +import ir.composenews.remotedatasource.util.HttpRoutes.PAGE +import ir.composenews.remotedatasource.util.HttpRoutes.PER_PAGE +import ir.composenews.remotedatasource.util.HttpRoutes.SPARKLINE +import ir.composenews.remotedatasource.util.HttpRoutes.VS_CURRENCY +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import javax.inject.Inject + +class MarketsApiImpl @Inject constructor( + private val httpClient: HttpClient, +) : MarketsApi { + override suspend fun getMarkets( + currency: String, + order: String, + perPage: Int, + page: Int, + sparkline: Boolean, + ): List = withContext(Dispatchers.IO) { + val response = httpClient.get { + url { + appendPathSegments(COINS, MARKETS) + parameters.append(VS_CURRENCY, currency) + parameters.append(ORDER, order) + parameters.append(PER_PAGE, perPage.toString()) + parameters.append(PAGE, page.toString()) + parameters.append(SPARKLINE, sparkline.toString()) + } + } + + response.body() + } + + override suspend fun getMarketChart( + id: String, + currency: String, + days: Int, + ): MarketChartResponse = withContext(Dispatchers.IO) { + val response = httpClient.get { + url { + appendPathSegments(COINS, id, MARKET_CHART) + parameters.append(VS_CURRENCY, currency) + parameters.append(DAYS, days.toString()) + } + } + + response.body() + } + + override suspend fun getMarketDetail(id: String): MarketDetailResponse = withContext(Dispatchers.IO) { + val response = httpClient.get { + url { + appendPathSegments(COINS, id) + } + } + + response.body() + } +} diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/di/ApiModule.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/di/ApiModule.kt new file mode 100644 index 00000000..7226d17d --- /dev/null +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/di/ApiModule.kt @@ -0,0 +1,16 @@ +package ir.composenews.remotedatasource.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import ir.composenews.remotedatasource.api.MarketsApi +import ir.composenews.remotedatasource.api.MarketsApiImpl + +@Module +@InstallIn(SingletonComponent::class) +abstract class ApiModule { + + @Binds + abstract fun bindMarketsApi(marketsApi: MarketsApiImpl): MarketsApi +} diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/di/RemoteDatasourceModule.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/di/RemoteDatasourceModule.kt index d7f5c3c5..b92f075a 100644 --- a/data/market-remote/src/main/java/ir/composenews/remotedatasource/di/RemoteDatasourceModule.kt +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/di/RemoteDatasourceModule.kt @@ -1,59 +1,59 @@ package ir.composenews.remotedatasource.di -import android.app.Application +import android.content.Context import com.chuckerteam.chucker.api.ChuckerInterceptor -import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import dagger.Module import dagger.Provides -import dagger.Reusable import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import ir.composenews.remotedatasource.api.BASE_URL -import ir.composenews.remotedatasource.api.MarketsApi +import io.ktor.client.HttpClient +import io.ktor.client.engine.okhttp.OkHttp +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.plugins.defaultRequest +import io.ktor.client.plugins.logging.LogLevel +import io.ktor.client.plugins.logging.Logger +import io.ktor.client.plugins.logging.Logging +import io.ktor.serialization.kotlinx.json.json +import ir.composenews.remotedatasource.util.HttpRoutes import kotlinx.serialization.json.Json -import okhttp3.MediaType.Companion.toMediaType -import okhttp3.OkHttpClient -import okhttp3.logging.HttpLoggingInterceptor -import retrofit2.Retrofit @Module @InstallIn(SingletonComponent::class) object RemoteDatasourceModule { @Provides - @Reusable - fun provideOkHttpClient( - app: Application, - ): OkHttpClient = OkHttpClient.Builder() - .addInterceptor(ChuckerInterceptor(app)) - .addNetworkInterceptor( - HttpLoggingInterceptor { message -> - println("LOG-NET: $message") - }.apply { - level = HttpLoggingInterceptor.Level.BODY - }, - ) - .build() + fun provideHttpClient( + @ApplicationContext context: Context, + ): HttpClient { + return HttpClient(OkHttp) { + defaultRequest { + url(urlString = HttpRoutes.BASE_URL) + } - @Provides - fun providesJson(): Json = Json { - ignoreUnknownKeys = true - } + install(Logging) { + level = LogLevel.BODY - @Provides - fun provideRetrofit( - client: OkHttpClient, - json: Json, - ): Retrofit { - return Retrofit.Builder() - .baseUrl(BASE_URL) - .client(client) - .addConverterFactory(json.asConverterFactory("application/json".toMediaType())) - .build() - } + logger = object : Logger { + override fun log(message: String) { + println("LOG-NET: $message") + } + } + } - @Provides - fun provideMarketsApi( - retrofit: Retrofit, - ): MarketsApi = retrofit.create(MarketsApi::class.java) + install(ContentNegotiation) { + json( + Json { + prettyPrint = true + isLenient = true + ignoreUnknownKeys = true + }, + ) + } + + engine { + addInterceptor(ChuckerInterceptor.Builder(context).build()) + } + } + } } diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/util/HttpRoutes.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/util/HttpRoutes.kt new file mode 100644 index 00000000..922b0db5 --- /dev/null +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/util/HttpRoutes.kt @@ -0,0 +1,14 @@ +package ir.composenews.remotedatasource.util + +internal object HttpRoutes { + const val BASE_URL = "https://api.coingecko.com/api/v3/" + const val COINS = "coins" + const val MARKETS = "markets" + const val VS_CURRENCY = "vs_currency" + const val ORDER = "order" + const val PER_PAGE = "per_page" + const val PAGE = "page" + const val SPARKLINE = "sparkline" + const val MARKET_CHART = "market_chart" + const val DAYS = "days" +} diff --git a/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt b/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt index 66b8e480..e6a6bb43 100644 --- a/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt +++ b/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt @@ -1,4 +1,4 @@ -@file:Suppress("MagicNumber", "TooGenericExceptionCaught") +@file:Suppress("MagicNumber", "TooGenericExceptionCaught", "MaxLineLength") package ir.composenews.data.repository diff --git a/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailLoadingView.kt b/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailLoadingView.kt index 96704ef8..1dbf76cf 100644 --- a/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailLoadingView.kt +++ b/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailLoadingView.kt @@ -1,3 +1,5 @@ +@file:Suppress("MagicNumber", "LongMethod") + package ir.composenews.marketdetail import androidx.compose.foundation.layout.Arrangement diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 981f5d2c..5fb11e88 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -58,6 +58,8 @@ workRuntimeKtx = "2.9.0" windowsSizeClass = "1.2.1" adaptive = "0.26.2-beta" +ktor = "2.3.5" + kotest = "5.7.2" espressoCore = "3.5.1" @@ -91,6 +93,13 @@ lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-ru navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } +# Ktor +ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" } +ktor-client-okhttp = { group = "io.ktor", name = "ktor-client-okhttp", version.ref = "ktor" } +ktor-json = { group = "io.ktor", name = "ktor-serialization-kotlinx-json", version.ref = "ktor" } +ktor-contentNegotiation = { group = "io.ktor", name = "ktor-client-content-negotiation", version.ref = "ktor" } +ktor-logging = { group = "io.ktor", name = "ktor-client-logging", version.ref = "ktor" } + retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" } kotlinx-serialization-converter = { group = "com.jakewharton.retrofit", name = "retrofit2-kotlinx-serialization-converter", version.ref = "kotlinx-serialization-converter" } kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization" } @@ -156,4 +165,11 @@ kotest = [ "kotest-assertionsCore", "kotest-property", "kotest-runnerJUnit5" +] +ktor = [ + "ktor-client-core", + "ktor-client-okhttp", + "ktor-contentNegotiation", + "ktor-json", + "ktor-logging" ] \ No newline at end of file diff --git a/library/designsystem/src/main/java/ir/composenews/designsystem/component/EmptyStateAnimation.kt b/library/designsystem/src/main/java/ir/composenews/designsystem/component/EmptyStateAnimation.kt index 5d474135..56cd68d1 100644 --- a/library/designsystem/src/main/java/ir/composenews/designsystem/component/EmptyStateAnimation.kt +++ b/library/designsystem/src/main/java/ir/composenews/designsystem/component/EmptyStateAnimation.kt @@ -1,3 +1,5 @@ +@file:Suppress("MagicNumber") + package ir.composenews.designsystem.component import androidx.compose.foundation.layout.Arrangement diff --git a/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt b/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt index 92777a74..85441c0b 100644 --- a/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt +++ b/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt @@ -1,4 +1,4 @@ -@file:Suppress("MagicNumber") +@file:Suppress("MagicNumber", "MaxLineLength", "LongMethod") package ir.composenews.designsystem.component @@ -41,6 +41,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp @@ -189,12 +190,21 @@ private fun MarketItemCard( Text(text = "$price $", style = MaterialTheme.typography.titleMedium) Spacer(modifier = Modifier.height(6.dp)) Row { - ArrowIconUpOrDown(priceChangePercentage24h) + val color = when { + priceChangePercentage24h.contains("-") -> { + if (isSystemInDarkTheme()) darkDownTrendRed else lightDownTrendRed + } + else -> { + if (isSystemInDarkTheme()) darkUptrendGreen else lightUptrendGreen + } + } + + ArrowIconUpOrDown(priceChangePercentage24h, tint = color) + Text( text = "$priceChangePercentage24h %", style = MaterialTheme.typography.bodyLarge, - color = if (priceChangePercentage24h.contains("-")) if (isSystemInDarkTheme()) darkDownTrendRed else lightDownTrendRed - else if (isSystemInDarkTheme()) darkUptrendGreen else lightUptrendGreen, + color = color, ) } } @@ -208,7 +218,7 @@ private fun MarketItemCard( } @Composable -private fun ArrowIconUpOrDown(priceChangePercentage24h: String) { +private fun ArrowIconUpOrDown(priceChangePercentage24h: String, tint: Color) { Icon( modifier = Modifier.size(size = 20.dp), painter = if (priceChangePercentage24h.contains("-")) { @@ -217,8 +227,7 @@ private fun ArrowIconUpOrDown(priceChangePercentage24h: String) { painterResource(id = R.drawable.baseline_arrow_upward_24) }, contentDescription = "", - tint = if (priceChangePercentage24h.contains("-")) if (isSystemInDarkTheme()) darkDownTrendRed else lightDownTrendRed - else if (isSystemInDarkTheme()) darkUptrendGreen else lightUptrendGreen, + tint = tint, ) } diff --git a/library/designsystem/src/main/java/ir/composenews/utils/WindowStateUtils.kt b/library/designsystem/src/main/java/ir/composenews/utils/WindowStateUtils.kt index fe29d0d3..f2fcf198 100644 --- a/library/designsystem/src/main/java/ir/composenews/utils/WindowStateUtils.kt +++ b/library/designsystem/src/main/java/ir/composenews/utils/WindowStateUtils.kt @@ -24,7 +24,11 @@ sealed interface DevicePosture { @OptIn(ExperimentalContracts::class) fun isBookPosture(foldFeature: FoldingFeature?): Boolean { contract { returns(true) implies (foldFeature != null) } - return foldFeature?.state == FoldingFeature.State.HALF_OPENED && foldFeature.orientation == FoldingFeature.Orientation.VERTICAL + + val isBookPosture = foldFeature?.state == FoldingFeature.State.HALF_OPENED && + foldFeature.orientation == FoldingFeature.Orientation.VERTICAL + + return isBookPosture } @OptIn(ExperimentalContracts::class) From c087106328613ddcabf477b84e0405ff42e19dbc Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Fri, 17 May 2024 18:07:07 +0330 Subject: [PATCH 03/65] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index de6a9d4f..19243358 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ For the detail of handling preview of composable functions in this code-base, pl - SQLDelight database - Dagger Hilt - Navigation -- Retrofit +- Ktor client - Work manager - Unit test - Support large screens @@ -44,7 +44,7 @@ For the detail of handling preview of composable functions in this code-base, pl ### We are porting the project to KMP. Here's the steps: - [x] GSON → Kotlinx Serialization - [x] ROOM → SQLDelight -- [ ] Retrofit → Ktor +- [x] Retrofit → Ktor - [x] JUnit → Kotest - [ ] Dagger-Hilt → Koin - [ ] Jetpack Compose → Compose Multiplatform From 9b3a125a09d8e645445cc9d76cce1c8f2b46b966 Mon Sep 17 00:00:00 2001 From: "r.zarchi" Date: Fri, 2 Aug 2024 12:19:16 +0330 Subject: [PATCH 04/65] Some new modules has created for the WearOS version of App --- app-watch/app/.gitignore | 1 + app-watch/app/build.gradle.kts | 64 +++++++++++++++++++ app-watch/app/lint.xml | 8 +++ app-watch/app/proguard-rules.pro | 21 ++++++ app-watch/app/src/main/AndroidManifest.xml | 31 +++++++++ .../composenews/ComposeNewsWearApplication.kt | 13 ++++ app-watch/app/src/main/res/values/strings.xml | 3 + app-watch/designsystem/.gitignore | 1 + app-watch/designsystem/build.gradle.kts | 12 ++++ .../designsystem/src/main/AndroidManifest.xml | 2 + .../app_watch/designsystem/theme/Theme.kt | 15 +++++ app-watch/navigation/.gitignore | 1 + app-watch/navigation/build.gradle.kts | 18 ++++++ .../navigation/src/main/AndroidManifest.xml | 2 + app-watch/ui/.gitignore | 1 + app-watch/ui/build.gradle.kts | 34 ++++++++++ app-watch/ui/src/main/AndroidManifest.xml | 2 + gradle/libs.versions.toml | 9 +++ settings.gradle | 5 ++ 19 files changed, 243 insertions(+) create mode 100644 app-watch/app/.gitignore create mode 100644 app-watch/app/build.gradle.kts create mode 100644 app-watch/app/lint.xml create mode 100644 app-watch/app/proguard-rules.pro create mode 100644 app-watch/app/src/main/AndroidManifest.xml create mode 100644 app-watch/app/src/main/java/ir/composenews/ComposeNewsWearApplication.kt create mode 100644 app-watch/app/src/main/res/values/strings.xml create mode 100644 app-watch/designsystem/.gitignore create mode 100644 app-watch/designsystem/build.gradle.kts create mode 100644 app-watch/designsystem/src/main/AndroidManifest.xml create mode 100644 app-watch/designsystem/src/main/java/ir/composenews/app_watch/designsystem/theme/Theme.kt create mode 100644 app-watch/navigation/.gitignore create mode 100644 app-watch/navigation/build.gradle.kts create mode 100644 app-watch/navigation/src/main/AndroidManifest.xml create mode 100644 app-watch/ui/.gitignore create mode 100644 app-watch/ui/build.gradle.kts create mode 100644 app-watch/ui/src/main/AndroidManifest.xml diff --git a/app-watch/app/.gitignore b/app-watch/app/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/app-watch/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app-watch/app/build.gradle.kts b/app-watch/app/build.gradle.kts new file mode 100644 index 00000000..12b0473e --- /dev/null +++ b/app-watch/app/build.gradle.kts @@ -0,0 +1,64 @@ +plugins { + id("composenews.android.application") + id("composenews.android.application.compose") + id("composenews.android.hilt") +} + +android { + namespace = libs.versions.projectApplicationId.get() + defaultConfig { + applicationId = libs.versions.projectApplicationId.get() + versionCode = libs.versions.projectVersionCode.get().toInt() + versionName = libs.versions.projectVersionName.get() + minSdk = libs.versions.projectMinSdkVersionWear.get().toInt() + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary = true + } + } + buildTypes { + getByName("debug") { + isMinifyEnabled = false + isShrinkResources = false + applicationIdSuffix = ".debug" + versionNameSuffix = "-debug" + } + getByName("release") { + isMinifyEnabled = true + isShrinkResources = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro", + ) + } + } +} + +dependencies { + + projects.apply { + implementation(appWatch.navigation) + implementation(appWatch.designsystem) + } + + projects.core.apply { + implementation(sync) + implementation(base) + implementation(uimarket) + } + + libs.apply { + implementation(compose.activity) + implementation(androidx.ktx) + implementation(hilt.work) + implementation(lifecycle.runtime.ktx) + implementation(libs.hilt.navigation.compose) + implementation(libs.compose.ui.preview.wear) + implementation(libs.compose.foundation.wear) + implementation(libs.compose.horologist.layout) + androidTestImplementation(platform(libs.compose.bom)) + androidTestImplementation(libs.compose.ui.test.junit4) + debugImplementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.test.manifest) + } +} \ No newline at end of file diff --git a/app-watch/app/lint.xml b/app-watch/app/lint.xml new file mode 100644 index 00000000..44fac75b --- /dev/null +++ b/app-watch/app/lint.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app-watch/app/proguard-rules.pro b/app-watch/app/proguard-rules.pro new file mode 100644 index 00000000..481bb434 --- /dev/null +++ b/app-watch/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app-watch/app/src/main/AndroidManifest.xml b/app-watch/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..508711d8 --- /dev/null +++ b/app-watch/app/src/main/AndroidManifest.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app-watch/app/src/main/java/ir/composenews/ComposeNewsWearApplication.kt b/app-watch/app/src/main/java/ir/composenews/ComposeNewsWearApplication.kt new file mode 100644 index 00000000..32204a3a --- /dev/null +++ b/app-watch/app/src/main/java/ir/composenews/ComposeNewsWearApplication.kt @@ -0,0 +1,13 @@ +package ir.composenews + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp + +@HiltAndroidApp +class ComposeNewsWearApplication : Application() { + + override fun onCreate() { + super.onCreate() + } + +} \ No newline at end of file diff --git a/app-watch/app/src/main/res/values/strings.xml b/app-watch/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..4acb7917 --- /dev/null +++ b/app-watch/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Compose News + \ No newline at end of file diff --git a/app-watch/designsystem/.gitignore b/app-watch/designsystem/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/app-watch/designsystem/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app-watch/designsystem/build.gradle.kts b/app-watch/designsystem/build.gradle.kts new file mode 100644 index 00000000..786128ff --- /dev/null +++ b/app-watch/designsystem/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + id("composenews.android.library") + id("composenews.android.library.compose") +} + +android { + namespace = "ir.composenews.app_watch.designsystem" +} + +dependencies { + implementation(libs.compose.material.wear) +} \ No newline at end of file diff --git a/app-watch/designsystem/src/main/AndroidManifest.xml b/app-watch/designsystem/src/main/AndroidManifest.xml new file mode 100644 index 00000000..568741e5 --- /dev/null +++ b/app-watch/designsystem/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app-watch/designsystem/src/main/java/ir/composenews/app_watch/designsystem/theme/Theme.kt b/app-watch/designsystem/src/main/java/ir/composenews/app_watch/designsystem/theme/Theme.kt new file mode 100644 index 00000000..0dc5455f --- /dev/null +++ b/app-watch/designsystem/src/main/java/ir/composenews/app_watch/designsystem/theme/Theme.kt @@ -0,0 +1,15 @@ +package ir.composenews.app_watch.designsystem.theme + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.runtime.Composable +import androidx.wear.compose.material.MaterialTheme + +@Composable +fun ComposeNewsWearTheme( + useDarkTheme: Boolean = isSystemInDarkTheme(), + content: @Composable () -> Unit, +) { + MaterialTheme( + content = content, + ) +} \ No newline at end of file diff --git a/app-watch/navigation/.gitignore b/app-watch/navigation/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/app-watch/navigation/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app-watch/navigation/build.gradle.kts b/app-watch/navigation/build.gradle.kts new file mode 100644 index 00000000..0c9523fe --- /dev/null +++ b/app-watch/navigation/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + id("composenews.android.library") + id("composenews.android.library.compose") +} + +android { + namespace = "ir.composenews.app_watch.navigation" +} + +dependencies { + projects.apply { + implementation(appWatch.ui) + implementation(core.uimarket) + implementation(domain.market) + + } + implementation(libs.navigation.compose.wear) +} \ No newline at end of file diff --git a/app-watch/navigation/src/main/AndroidManifest.xml b/app-watch/navigation/src/main/AndroidManifest.xml new file mode 100644 index 00000000..568741e5 --- /dev/null +++ b/app-watch/navigation/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app-watch/ui/.gitignore b/app-watch/ui/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/app-watch/ui/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app-watch/ui/build.gradle.kts b/app-watch/ui/build.gradle.kts new file mode 100644 index 00000000..12a209f8 --- /dev/null +++ b/app-watch/ui/build.gradle.kts @@ -0,0 +1,34 @@ +plugins { + id("composenews.android.feature") +} + +android { + namespace = "ir.composenews.app_watch.ui" +} + +configurations.all { + resolutionStrategy { + force("androidx.test:runner:1.4.0") + } +} + +dependencies { + + projects.appWatch.apply { + implementation(designsystem) + } + + projects.feature.apply { + implementation(marketlist) + implementation(marketdetail) + } + + implementation(projects.data.marketRepository) + implementation(projects.core.uimarket) + implementation(projects.core.extensions) + implementation(libs.compose.ui.preview.wear) + implementation(libs.compose.foundation.wear) + implementation(libs.compose.horologist.layout) + implementation(libs.compose.ui.test.manifest) + implementation(libs.compose.ui.test.junit4) +} diff --git a/app-watch/ui/src/main/AndroidManifest.xml b/app-watch/ui/src/main/AndroidManifest.xml new file mode 100644 index 00000000..568741e5 --- /dev/null +++ b/app-watch/ui/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5fb11e88..4be1c8fe 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,6 +2,7 @@ projectApplicationId = "ir.composenews" projectVersionName = "1.0.0" projectMinSdkVersion = "23" +projectMinSdkVersionWear = "30" projectTargetSdkVersion = "34" projectCompileSdkVersion = "34" projectVersionCode = "1" @@ -19,6 +20,9 @@ composeActivity = "1.8.2" composeCoil = "2.2.2" composeCompiler = "1.5.11" composeMaterial3 = "1.2.1" +composeWear = "1.4.0-beta03" +wearToolingPreview = "1.0.0" +horologistComposeLayout = "0.6.17" detekt = "1.23.1" hilt = "2.50" @@ -77,6 +81,10 @@ compose-runtime = { group = "androidx.compose.runtime", name = "runtime" } compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "composeMaterial3" } compose-activity = { group = "androidx.activity", name = "activity-compose", version.ref = "composeActivity" } compose-coil = { group = "io.coil-kt", name = "coil-compose", version.ref = "composeCoil" } +compose-material-wear = { group = "androidx.wear.compose", name = "compose-material", version.ref = "composeWear" } +compose-foundation-wear = { group = "androidx.wear.compose", name = "compose-foundation", version.ref = "composeWear" } +compose-ui-preview-wear = { group = "androidx.wear", name = "wear-tooling-preview", version.ref = "wearToolingPreview" } +compose-horologist-layout = { module = "com.google.android.horologist:horologist-compose-layout", version.ref = "horologistComposeLayout" } hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } @@ -92,6 +100,7 @@ lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-view lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "lifeCycleRuntimeCompose" } navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } +navigation-compose-wear = { group = "androidx.wear.compose", name = "compose-navigation", version.ref = "composeWear" } # Ktor ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" } diff --git a/settings.gradle b/settings.gradle index d3ea8903..58bc7068 100644 --- a/settings.gradle +++ b/settings.gradle @@ -29,3 +29,8 @@ include ':data:market-repository' include ':feature:marketlist' include ':feature:marketdetail' include ':app' +include ':app-watch' +include ':app-watch:app' +include ':app-watch:navigation' +include ':app-watch:ui' +include ':app-watch:designsystem' From 62d3eafa74cbf64f93b8bde51ff65bd1bf4685a9 Mon Sep 17 00:00:00 2001 From: "r.zarchi" Date: Fri, 2 Aug 2024 14:06:34 +0330 Subject: [PATCH 05/65] Implemented MarketList and MarketDetail screens --- app-watch/app/src/main/AndroidManifest.xml | 10 + .../main/java/ir/composenews/MainViewModel.kt | 35 +++ .../navigation/ComposeNewsWearNavHost.kt | 31 +++ .../java/ir/composenews/ui/MainActivity.kt | 61 +++++ .../navigation/graph/Destinations.kt | 7 + .../navigation/graph/MainContract.kt | 16 ++ .../app_watch/navigation/graph/NewsDetail.kt | 34 +++ .../app_watch/navigation/graph/NewsList.kt | 20 ++ .../app_watch/ui/details/MarketWearDetails.kt | 206 ++++++++++++++++ .../app_watch/ui/list/MarketItem.kt | 225 ++++++++++++++++++ .../app_watch/ui/list/MarketListWearScreen.kt | 109 +++++++++ 11 files changed, 754 insertions(+) create mode 100644 app-watch/app/src/main/java/ir/composenews/MainViewModel.kt create mode 100644 app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt create mode 100644 app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt create mode 100644 app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/Destinations.kt create mode 100644 app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/MainContract.kt create mode 100644 app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsDetail.kt create mode 100644 app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsList.kt create mode 100644 app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt create mode 100644 app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt create mode 100644 app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketListWearScreen.kt diff --git a/app-watch/app/src/main/AndroidManifest.xml b/app-watch/app/src/main/AndroidManifest.xml index 508711d8..ea9261b8 100644 --- a/app-watch/app/src/main/AndroidManifest.xml +++ b/app-watch/app/src/main/AndroidManifest.xml @@ -26,6 +26,16 @@ android:value="true" /> + + + + + + + \ No newline at end of file diff --git a/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt b/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt new file mode 100644 index 00000000..16ca273d --- /dev/null +++ b/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt @@ -0,0 +1,35 @@ +package ir.composenews + +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import ir.composenews.app_watch.navigation.graph.MainContract +import ir.composenews.base.BaseViewModel +import ir.composenews.core_test.dispatcher.DispatcherProvider +import ir.composenews.uimarket.model.MarketModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class MainViewModel @Inject constructor( + dispatcherProvider: DispatcherProvider, +) : BaseViewModel(dispatcherProvider), MainContract { + + private val mutableState = MutableStateFlow(MainContract.State()) + override val state: StateFlow = mutableState.asStateFlow() + override fun event(event: MainContract.Event) { + when (event) { + is MainContract.Event.SetMarket -> setMarket(event.market) + } + } + + private fun setMarket(market: MarketModel?) = viewModelScope.launch { + mutableState.emit( + mutableState.value.copy( + market + ) + ) + } +} \ No newline at end of file diff --git a/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt b/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt new file mode 100644 index 00000000..2773fd76 --- /dev/null +++ b/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt @@ -0,0 +1,31 @@ +package ir.composenews.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.navigation.NavHostController +import androidx.wear.compose.navigation.SwipeDismissableNavHost +import ir.composenews.app_watch.navigation.graph.MainContract +import ir.composenews.app_watch.navigation.graph.Destinations +import ir.composenews.app_watch.navigation.graph.wearMarketDetail +import ir.composenews.app_watch.navigation.graph.wearMarketList +import ir.composenews.uimarket.model.MarketModel + +@Composable +fun ComposeNewsWearNavHost( + navController: NavHostController, + modifier: Modifier, + onMarketSelected: ((MarketModel) -> Unit)? = null, + uiState: MainContract.State +) { + SwipeDismissableNavHost( + navController = navController, + startDestination = Destinations.MarketListScreen.route, + modifier = modifier, + ) { + wearMarketList( + showFavorite = false, + onMarketSelected = onMarketSelected, + ) + wearMarketDetail(uiState) + } +} \ No newline at end of file diff --git a/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt b/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt new file mode 100644 index 00000000..a15b9aac --- /dev/null +++ b/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt @@ -0,0 +1,61 @@ +package ir.composenews.ui + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.viewModels +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.wear.compose.material.TimeText +import androidx.wear.compose.navigation.rememberSwipeDismissableNavController +import androidx.wear.tooling.preview.devices.WearDevices +import com.google.android.horologist.compose.layout.AppScaffold +import com.google.android.horologist.compose.layout.ScreenScaffold +import dagger.hilt.android.AndroidEntryPoint +import ir.composenews.MainViewModel +import ir.composenews.app_watch.designsystem.theme.ComposeNewsWearTheme +import ir.composenews.app_watch.navigation.graph.Destinations +import ir.composenews.app_watch.navigation.graph.MainContract +import ir.composenews.navigation.ComposeNewsWearNavHost + +@AndroidEntryPoint +class MainActivity : ComponentActivity() { + + private val mainViewModel: MainViewModel by viewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + WearApp() + } + } + + @Composable + fun WearApp() { + val navController = rememberSwipeDismissableNavController() + val state = mainViewModel.state.collectAsState() + ComposeNewsWearTheme { + AppScaffold { + ScreenScaffold(timeText = { TimeText() }) { + ComposeNewsWearNavHost( + navController = navController, + onMarketSelected = { + mainViewModel.event(MainContract.Event.SetMarket(it)) + navController.navigate(Destinations.MarketDetailScreen().route) + }, + uiState = state.value, + modifier = Modifier + ) + } + } + } + } + + @Preview(device = WearDevices.LARGE_ROUND, showSystemUi = true) + @Composable + fun DefaultPreview() { + WearApp() + } +} \ No newline at end of file diff --git a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/Destinations.kt b/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/Destinations.kt new file mode 100644 index 00000000..77741578 --- /dev/null +++ b/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/Destinations.kt @@ -0,0 +1,7 @@ +package ir.composenews.app_watch.navigation.graph + +sealed class Destinations(val route: String) { + data object MarketListScreen : Destinations("market_list_screen") + data class MarketDetailScreen(val market: String = "market") : + Destinations("market_detail_screen") +} diff --git a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/MainContract.kt b/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/MainContract.kt new file mode 100644 index 00000000..097c123d --- /dev/null +++ b/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/MainContract.kt @@ -0,0 +1,16 @@ +package ir.composenews.app_watch.navigation.graph + +import ir.composenews.base.UnidirectionalViewModel +import ir.composenews.uimarket.model.MarketModel + +interface MainContract : + UnidirectionalViewModel { + + data class State( + val market: MarketModel? = null, + ) + + sealed class Event { + data class SetMarket(val market: MarketModel?) : Event() + } +} diff --git a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsDetail.kt b/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsDetail.kt new file mode 100644 index 00000000..68ed7030 --- /dev/null +++ b/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsDetail.kt @@ -0,0 +1,34 @@ +package ir.composenews.app_watch.navigation.graph + +import android.os.Build +import android.os.Bundle +import android.os.Parcelable +import androidx.navigation.NavBackStackEntry +import androidx.navigation.NavGraphBuilder +import androidx.wear.compose.navigation.composable +import ir.composenews.app_watch.ui.details.MarketDetailWearRoute +import ir.composenews.uimarket.model.MarketModel + +fun NavGraphBuilder.wearMarketDetail(uiState: MainContract.State) { + composable( + route = Destinations.MarketDetailScreen().route, + ) { entry -> + val market = entry.parcelableData(Destinations.MarketDetailScreen().market) + ?: uiState.market as MarketModel + MarketDetailWearRoute( + market = market, + ) + } +} + +private fun NavBackStackEntry.parcelableData(key: String): T? { + return arguments?.parcelable(key) as? T +} + +private inline fun Bundle.parcelable(key: String): T? = when { + Build.VERSION.SDK_INT >= 33 -> getParcelable(key, T::class.java) + else -> + @Suppress("DEPRECATION") + getParcelable(key) + as? T +} diff --git a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsList.kt b/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsList.kt new file mode 100644 index 00000000..f1677f15 --- /dev/null +++ b/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsList.kt @@ -0,0 +1,20 @@ +package ir.composenews.app_watch.navigation.graph + +import androidx.navigation.NavGraphBuilder +import androidx.wear.compose.navigation.composable +import ir.composenews.app_watch.ui.list.MarketListWearRoute +import ir.composenews.uimarket.model.MarketModel + +fun NavGraphBuilder.wearMarketList( + showFavorite: Boolean, + onMarketSelected: ((MarketModel) -> Unit)? = null, +) { + composable(Destinations.MarketListScreen.route) { + MarketListWearRoute( + onNavigateToDetailScreen = { market -> + onMarketSelected?.invoke(market) + }, + showFavoriteList = showFavorite, + ) + } +} \ No newline at end of file diff --git a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt b/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt new file mode 100644 index 00000000..fef85167 --- /dev/null +++ b/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt @@ -0,0 +1,206 @@ +package ir.composenews.app_watch.ui.details + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.HorizontalDivider +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.wear.compose.material.MaterialTheme +import androidx.wear.compose.material.Text +import androidx.wear.tooling.preview.devices.WearDevices +import coil.compose.rememberAsyncImagePainter +import com.google.android.horologist.annotations.ExperimentalHorologistApi +import com.google.android.horologist.compose.layout.ScalingLazyColumn +import com.google.android.horologist.compose.layout.ScalingLazyColumnDefaults +import com.google.android.horologist.compose.layout.rememberResponsiveColumnState +import ir.composenews.base.BaseRoute +import ir.composenews.base.use +import ir.composenews.designsystem.component.QuadLineChart +import ir.composenews.designsystem.component.shimmerEffect +import ir.composenews.designsystem.theme.ComposeNewsTheme +import ir.composenews.domain.model.MarketDetail +import ir.composenews.marketdetail.MarketDetailContract +import ir.composenews.marketdetail.MarketDetailContract.State +import ir.composenews.marketdetail.MarketDetailViewModel +import ir.composenews.marketdetail.formatNumber +import ir.composenews.marketdetail.preview_provider.MarketDetailStateProvider +import ir.composenews.uimarket.model.MarketModel + +@Composable +fun MarketDetailWearRoute( + market: MarketModel?, +) { + val viewModel: MarketDetailViewModel = hiltViewModel() + val (state, event) = use(viewModel = viewModel) + LaunchedEffect(key1 = market) { + event.invoke(MarketDetailContract.Event.SetMarket(market = market)) + market?.let { + event.invoke(MarketDetailContract.Event.GetMarketChart(marketId = market.id)) + } + } + LaunchedEffect(key1 = market) { + event.invoke(MarketDetailContract.Event.SetMarket(market = market)) + market?.let { + event.invoke(MarketDetailContract.Event.GetMarketDetail(marketId = market.id)) + } + } + BaseRoute( + baseViewModel = viewModel, + shimmerView = { + MarketDetailLoadingView() + }, + ) { + MarketDetailScreen( + marketDetailState = state, + ) + } +} + +@OptIn(ExperimentalHorologistApi::class) +@Composable +private fun MarketDetailScreen( + marketDetailState: State, +) { + + val listState = rememberResponsiveColumnState( + contentPadding = ScalingLazyColumnDefaults.padding( + first = ScalingLazyColumnDefaults.ItemType.Icon, + last = ScalingLazyColumnDefaults.ItemType.Text, + ), + ) + + ScalingLazyColumn(columnState = listState) { + item { + Image( + painter = rememberAsyncImagePainter(model = marketDetailState.market?.imageUrl), + contentDescription = marketDetailState.market?.name, + modifier = Modifier + .size(48.dp) + .clip(CircleShape), + ) + } + item { + Text( + text = marketDetailState.market?.name ?: "--", + style = MaterialTheme.typography.title1, + ) + } + item { + Text( + text = "${marketDetailState.market?.currentPrice} $", + style = MaterialTheme.typography.body1, + ) + } + item { + QuadLineChart(data = marketDetailState.marketChart.prices) + } + item { + Text( + text = "Market Data", + style = MaterialTheme.typography.title2, + ) + } + item { + HorizontalDivider() + } + item { + MarketDetail(marketDetailState.marketDetail.marketData) + } + } +} + +@Composable +fun MarketDetail(marketData: MarketDetail.MarketData?) { + marketData?.let { data -> + Column( + modifier = Modifier.fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalAlignment = Alignment.Start + ) { + data.marketCap?.let { marketCap -> + MarketDetailDataBlock("Market Cap", formatNumber(marketCap.usd)) + } + data.high24h?.let { high24h -> + MarketDetailDataBlock("High 24h", high24h.usd.toString()) + } + data.low24h?.let { low24h -> + MarketDetailDataBlock("Low 24h", low24h.usd.toString()) + } + data.marketCapRank?.let { marketCapRank -> + MarketDetailDataBlock("Rank", "#$marketCapRank") + } + } + } +} + +@Composable +private fun MarketDetailDataBlock(title: String, value: String) { + Text( + text = title, + style = MaterialTheme.typography.title3, + color = MaterialTheme.colors.secondary + ) + Text( + text = value, + style = MaterialTheme.typography.body2, + ) +} + +@Composable +fun MarketDetailLoadingView() { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterVertically), + modifier = Modifier.fillMaxSize() + ) { + Box( + modifier = Modifier + .size(48.dp) + .clip(CircleShape) + .shimmerEffect(), + ) + Box( + modifier = Modifier + .fillMaxWidth(0.5f) + .clip(RoundedCornerShape(4.dp)) + .height(20.dp) + .shimmerEffect(), + ) + Box( + modifier = Modifier + .fillMaxWidth(0.2f) + .clip(RoundedCornerShape(4.dp)) + .height(12.dp) + .shimmerEffect(), + ) + + } +} + +@Preview( + device = WearDevices.LARGE_ROUND, + showSystemUi = true, +) +@Composable +private fun MarketDetailScreenPrev( + @PreviewParameter(MarketDetailStateProvider::class) marketDetailState: State, +) { + ComposeNewsTheme { + MarketDetailScreen(marketDetailState = marketDetailState) + } +} \ No newline at end of file diff --git a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt b/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt new file mode 100644 index 00000000..4a9654fa --- /dev/null +++ b/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt @@ -0,0 +1,225 @@ +@file:Suppress("MagicNumber", "MaxLineLength", "LongMethod") + +package ir.composenews.app_watch.ui.list + +import androidx.compose.foundation.Image +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.wear.compose.material.Card +import androidx.wear.compose.material.Icon +import androidx.wear.compose.material.MaterialTheme +import androidx.wear.compose.material.Text +import androidx.wear.tooling.preview.devices.WearDevices +import coil.compose.rememberAsyncImagePainter +import com.google.android.horologist.annotations.ExperimentalHorologistApi +import com.google.android.horologist.compose.layout.ScalingLazyColumn +import com.google.android.horologist.compose.layout.ScalingLazyColumnDefaults +import com.google.android.horologist.compose.layout.rememberResponsiveColumnState +import ir.composenews.app_watch.designsystem.theme.ComposeNewsWearTheme +import ir.composenews.designsystem.R +import ir.composenews.designsystem.component.shimmerEffect +import ir.composenews.designsystem.theme.darkDownTrendRed +import ir.composenews.designsystem.theme.darkUptrendGreen +import ir.composenews.designsystem.theme.lightDownTrendRed +import ir.composenews.designsystem.theme.lightUptrendGreen +import java.util.Locale + +@Composable +fun MarketItem( + modifier: Modifier, + name: String, + symbol: String, + urlToImage: String, + price: String, + priceChangePercentage24h: String, + onItemClick: () -> Unit, +) { + + MarketItemCard( + modifier = modifier, + name = name, + symbol = symbol, + urlToImage = urlToImage, + price = price, + priceChangePercentage24h = priceChangePercentage24h, + onItemClick = { onItemClick() }, + ) +} + +@Composable +private fun MarketItemCard( + modifier: Modifier, + name: String, + symbol: String, + urlToImage: String, + price: String, + priceChangePercentage24h: String, + onItemClick: () -> Unit, +) { + Card( + modifier = modifier.wrapContentHeight(), + onClick = { onItemClick() } + ) { + Row( + modifier = Modifier + .fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceAround, + verticalAlignment = Alignment.CenterVertically, + ) { + Image( + painter = rememberAsyncImagePainter(model = urlToImage), + contentDescription = name, + modifier = Modifier + .size(32.dp) + .clip(CircleShape), + ) + Column( + modifier = Modifier.fillMaxHeight(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceAround + ) { + Text( + text = symbol.uppercase(Locale.getDefault()), + style = MaterialTheme.typography.caption3 + ) + Text( + text = name, + style = MaterialTheme.typography.caption3, + maxLines = 1 + ) + } + Column( + modifier = Modifier.fillMaxHeight(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceAround + ) { + Text( + text = "$price $", style = MaterialTheme.typography.caption3 + ) + Row(verticalAlignment = Alignment.CenterVertically) { + val color = when { + priceChangePercentage24h.contains("-") -> { + if (isSystemInDarkTheme()) darkDownTrendRed else lightDownTrendRed + } + + else -> { + if (isSystemInDarkTheme()) darkUptrendGreen else lightUptrendGreen + } + } + + ArrowIconUpOrDown(priceChangePercentage24h, tint = color) + + Text( + text = "$priceChangePercentage24h %", + style = MaterialTheme.typography.caption3, + color = color, + ) + } + } + } + } +} + +@Composable +private fun ArrowIconUpOrDown(priceChangePercentage24h: String, tint: Color) { + Icon( + modifier = Modifier.size(size = 10.dp), + painter = if (priceChangePercentage24h.contains("-")) { + painterResource(id = R.drawable.baseline_arrow_downward_24) + } else { + painterResource(id = R.drawable.baseline_arrow_upward_24) + }, + contentDescription = "", + tint = tint, + ) +} + +@Preview(device = WearDevices.LARGE_ROUND, showSystemUi = true) +@Composable +private fun MarketItemPrev() { + ComposeNewsWearTheme { + MarketItem( + modifier = Modifier, + name = "Polkad", + symbol = "NEARF", + urlToImage = "", + price = "100000", + priceChangePercentage24h = "100000", + onItemClick = {}, + ) + } +} + +@Preview(device = WearDevices.LARGE_ROUND, showSystemUi = true) +@Composable +private fun ShimmerMarketItem() { + Card( + modifier = Modifier.wrapContentHeight(), + onClick = {}, + ) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Box( + modifier = Modifier + .size(32.dp) + .clip(CircleShape) + .shimmerEffect(), + ) + Column( + modifier = Modifier.weight(1F), + ) { + Box( + modifier = Modifier + .fillMaxWidth(0.8f) + .height(10.dp) + .shimmerEffect(), + ) + Spacer(modifier = Modifier.height(8.dp)) + Box( + modifier = Modifier + .fillMaxWidth(0.5f) + .height(10.dp) + .shimmerEffect(), + ) + } + } + } +} + +@OptIn(ExperimentalHorologistApi::class) +@Composable +fun ShimmerMarketListItem() { + ScalingLazyColumn( + rememberResponsiveColumnState( + contentPadding = ScalingLazyColumnDefaults.padding( + first = ScalingLazyColumnDefaults.ItemType.Card, + last = ScalingLazyColumnDefaults.ItemType.Card, + ), + ) + ) { + items(20) { + ShimmerMarketItem() + } + } +} diff --git a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketListWearScreen.kt b/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketListWearScreen.kt new file mode 100644 index 00000000..01314623 --- /dev/null +++ b/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketListWearScreen.kt @@ -0,0 +1,109 @@ +package ir.composenews.app_watch.ui.list + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Modifier +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.wear.compose.foundation.lazy.items +import com.google.android.horologist.annotations.ExperimentalHorologistApi +import com.google.android.horologist.compose.layout.ScalingLazyColumn +import com.google.android.horologist.compose.layout.ScalingLazyColumnDefaults +import com.google.android.horologist.compose.layout.rememberResponsiveColumnState +import ir.composenews.base.BaseRoute +import ir.composenews.base.use +import ir.composenews.designsystem.component.pull_refresh_indicator.pullRefresh +import ir.composenews.designsystem.component.pull_refresh_indicator.rememberPullRefreshState +import ir.composenews.extensions.roundToTwoDecimalPlaces +import ir.composenews.marketlist.MarketListContract +import ir.composenews.marketlist.MarketListViewModel +import ir.composenews.uimarket.model.MarketModel + +@Composable +fun MarketListWearRoute( + showFavoriteList: Boolean = false, + onNavigateToDetailScreen: (market: MarketModel) -> Unit, +) { + val viewModel: MarketListViewModel = hiltViewModel() + val (state, event) = use(viewModel = viewModel) + LaunchedEffect(key1 = Unit) { + event.invoke(MarketListContract.Event.OnSetShowFavoriteList(showFavoriteList = showFavoriteList)) + if (!showFavoriteList) { + event.invoke(MarketListContract.Event.OnGetMarketList) + } + } + + BaseRoute( + baseViewModel = viewModel, + shimmerView = { + ShimmerMarketListItem() + }, + ) { + MarketListWearScreen( + marketListState = state, + onNavigateToDetailScreen = onNavigateToDetailScreen, + onRefresh = { + event.invoke(MarketListContract.Event.OnRefresh) + }, + ) + } + +} + + +@OptIn(ExperimentalHorologistApi::class) +@Composable +private fun MarketListWearScreen( + marketListState: MarketListContract.State, + onNavigateToDetailScreen: (market: MarketModel) -> Unit, + onRefresh: () -> Unit, + modifier: Modifier = Modifier, +) { + + val refreshState = + rememberPullRefreshState(refreshing = marketListState.refreshing, onRefresh = onRefresh) + + val listState = rememberResponsiveColumnState( + contentPadding = ScalingLazyColumnDefaults.padding( + first = ScalingLazyColumnDefaults.ItemType.Card, + last = ScalingLazyColumnDefaults.ItemType.Card, + ), + ) + + Box( + modifier = modifier + .fillMaxWidth() + .pullRefresh(refreshState) + ) { + AnimatedVisibility( + visible = !marketListState.refreshing, + enter = fadeIn(), + exit = fadeOut(), + ) { + ScalingLazyColumn( + columnState = listState + ) { + items( + items = marketListState.marketList, + key = { it.name }, + ) { market -> + MarketItem( + modifier = modifier, + name = market.name, + symbol = market.symbol, + urlToImage = market.imageUrl, + price = market.currentPrice.toString(), + priceChangePercentage24h = + market.priceChangePercentage24h.roundToTwoDecimalPlaces(), + onItemClick = { onNavigateToDetailScreen(market) }, + ) + } + } + } + } + +} \ No newline at end of file From 58c078d7ae1f46f94b568d3d998d1272613ceaa6 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:11:43 +0330 Subject: [PATCH 06/65] [feature] Add ktor module --- core/ktor/.gitignore | 1 + core/ktor/build.gradle.kts | 17 +++++++++++++++++ core/ktor/src/main/AndroidManifest.xml | 2 ++ settings.gradle | 1 + 4 files changed, 21 insertions(+) create mode 100644 core/ktor/.gitignore create mode 100644 core/ktor/build.gradle.kts create mode 100644 core/ktor/src/main/AndroidManifest.xml diff --git a/core/ktor/.gitignore b/core/ktor/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/core/ktor/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/ktor/build.gradle.kts b/core/ktor/build.gradle.kts new file mode 100644 index 00000000..37c9f279 --- /dev/null +++ b/core/ktor/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + id("composenews.android.library") + libs.plugins.apply { + alias(kotlinx.serialization) + } +} + +android { + namespace = "ir.composenews.ktor" + +} + +dependencies { + libs.apply { + implementation(bundles.ktor) + } +} \ No newline at end of file diff --git a/core/ktor/src/main/AndroidManifest.xml b/core/ktor/src/main/AndroidManifest.xml new file mode 100644 index 00000000..fa57d87f --- /dev/null +++ b/core/ktor/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index d3ea8903..4446c27c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -22,6 +22,7 @@ include ':core:test' include ':core:base' include ':core:uimarket' include ':core:extensions' +include ':core:ktor' include ':domain:market' include ':data:market-remote' include ':data:market-local' From 7ca21c46d8e0de1ac3e1cfc9e905318604c52f80 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:20:17 +0330 Subject: [PATCH 07/65] [feature] Add `ApiResponse` for handling API response --- .../java/ir/composenews/ktor/ApiResponse.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 core/ktor/src/main/java/ir/composenews/ktor/ApiResponse.kt diff --git a/core/ktor/src/main/java/ir/composenews/ktor/ApiResponse.kt b/core/ktor/src/main/java/ir/composenews/ktor/ApiResponse.kt new file mode 100644 index 00000000..37609f97 --- /dev/null +++ b/core/ktor/src/main/java/ir/composenews/ktor/ApiResponse.kt @@ -0,0 +1,27 @@ +package ir.composenews.ktor + +sealed interface ApiResponse { + data class Success(val data: T) : ApiResponse + + /** + * There are two subtypes: [ApiResponse.Failure.Error] and [ApiResponse.Failure.Exception]. + */ + sealed interface Failure : ApiResponse { + + /** + * API communication conventions do not match or applications need to handle errors. + * e.g., internal server error and etc... + */ + data class Error(val payload: Any?) : Failure { + val message = payload.toString() + } + + /** + * An unexpected exception occurs while creating requests or processing an response in the client side. + * e.g., network connection error, timeout and etc... + */ + data class Exception(val throwable: Throwable) : Failure { + val message: String? = throwable.message + } + } +} From 4b5f1c57aecf9d2fa5ddd9c6dfec6fead16c41b9 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:22:09 +0330 Subject: [PATCH 08/65] [feature] Add `ApiResponse` utilities and `StatusCode` --- .../composenews/ktor/ApiResponseExtension.kt | 35 +++++++++++++++++++ .../java/ir/composenews/ktor/StatusCode.kt | 17 +++++++++ 2 files changed, 52 insertions(+) create mode 100644 core/ktor/src/main/java/ir/composenews/ktor/ApiResponseExtension.kt create mode 100644 core/ktor/src/main/java/ir/composenews/ktor/StatusCode.kt diff --git a/core/ktor/src/main/java/ir/composenews/ktor/ApiResponseExtension.kt b/core/ktor/src/main/java/ir/composenews/ktor/ApiResponseExtension.kt new file mode 100644 index 00000000..7a189c56 --- /dev/null +++ b/core/ktor/src/main/java/ir/composenews/ktor/ApiResponseExtension.kt @@ -0,0 +1,35 @@ + +package ir.composenews.ktor + +import io.ktor.client.call.body +import io.ktor.client.statement.HttpResponse + +val successCode: IntRange = 200..299 + +fun HttpResponse.getStatusCode(): StatusCode { + return StatusCode.entries.find { + it.code == status.value + } ?: StatusCode.Unknown +} + +val ApiResponse.Failure.Error.payloadResponse: HttpResponse + inline get() = (payload as? HttpResponse) ?: throw IllegalArgumentException() + +val ApiResponse.Failure.Error.statusCode: StatusCode + inline get() = payloadResponse.getStatusCode() + +suspend inline fun apiResponseOf( + successCodeRange: IntRange = successCode, + crossinline f: suspend () -> HttpResponse, +): ApiResponse = try { + val response = f() + if (response.status.value in successCodeRange) { + ApiResponse.Success( + data = response.body() ?: Unit as T, + ) + } else { + ApiResponse.Failure.Error(response) + } +} catch (ex: Exception) { + ApiResponse.Failure.Exception(ex) +} diff --git a/core/ktor/src/main/java/ir/composenews/ktor/StatusCode.kt b/core/ktor/src/main/java/ir/composenews/ktor/StatusCode.kt new file mode 100644 index 00000000..82adc53b --- /dev/null +++ b/core/ktor/src/main/java/ir/composenews/ktor/StatusCode.kt @@ -0,0 +1,17 @@ + +package ir.composenews.ktor + +/** + * https://docs.coingecko.com/reference/common-errors-rate-limit + */ +enum class StatusCode(val code: Int) { + Unknown(0), + BadRequest(400), + Forbidden(403), + RequestTimeout(408), + TooManyRequests(429), + InternalServerError(500), + ServiceUnavailable(500), + AccessDenied(500), + LimitRequest(10005), +} From d18d7e905a11dba194721d4948f42bcd0db4f7b6 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:24:00 +0330 Subject: [PATCH 09/65] [feature] Add HttpClient extensions and ApiResponse handling functions --- .../composenews/ktor/HttpClientExtension.kt | 17 ++++ .../composenews/ktor/ResponseTransformer.kt | 96 +++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 core/ktor/src/main/java/ir/composenews/ktor/HttpClientExtension.kt create mode 100644 core/ktor/src/main/java/ir/composenews/ktor/ResponseTransformer.kt diff --git a/core/ktor/src/main/java/ir/composenews/ktor/HttpClientExtension.kt b/core/ktor/src/main/java/ir/composenews/ktor/HttpClientExtension.kt new file mode 100644 index 00000000..1955465b --- /dev/null +++ b/core/ktor/src/main/java/ir/composenews/ktor/HttpClientExtension.kt @@ -0,0 +1,17 @@ +package ir.composenews.ktor + +import io.ktor.client.HttpClient +import io.ktor.client.request.HttpRequestBuilder +import io.ktor.client.request.request +import io.ktor.http.HttpMethod + +suspend inline fun HttpClient.getApiResponse( + builder: HttpRequestBuilder, +): ApiResponse { + builder.method = HttpMethod.Get + return apiResponseOf { request(builder) } +} + +suspend inline fun HttpClient.getApiResponse( + block: HttpRequestBuilder.() -> Unit, +): ApiResponse = getApiResponse(HttpRequestBuilder().apply(block)) diff --git a/core/ktor/src/main/java/ir/composenews/ktor/ResponseTransformer.kt b/core/ktor/src/main/java/ir/composenews/ktor/ResponseTransformer.kt new file mode 100644 index 00000000..e1db0db5 --- /dev/null +++ b/core/ktor/src/main/java/ir/composenews/ktor/ResponseTransformer.kt @@ -0,0 +1,96 @@ + +package ir.composenews.ktor + +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +@OptIn(ExperimentalContracts::class) +inline fun ApiResponse.onSuccess( + crossinline onResult: ApiResponse.Success.() -> Unit, +): ApiResponse { + contract { callsInPlace(onResult, InvocationKind.AT_MOST_ONCE) } + if (this is ApiResponse.Success) { + onResult(this) + } + return this +} + +@OptIn(ExperimentalContracts::class) +suspend inline fun ApiResponse.suspendOnSuccess( + crossinline onResult: suspend ApiResponse.Success.() -> Unit, +): ApiResponse { + contract { callsInPlace(onResult, InvocationKind.AT_MOST_ONCE) } + if (this is ApiResponse.Success) { + onResult(this) + } + return this +} + +@OptIn(ExperimentalContracts::class) +suspend inline fun ApiResponse.Success.suspendMap( + crossinline mapper: suspend (ApiResponse.Success) -> V, +): V { + contract { callsInPlace(mapper, InvocationKind.AT_MOST_ONCE) } + return mapper(this) +} + +@OptIn(ExperimentalContracts::class) +suspend inline fun ApiResponse.suspendOnError( + crossinline onResult: suspend ApiResponse.Failure.Error.() -> Unit, +): ApiResponse { + contract { callsInPlace(onResult, InvocationKind.AT_MOST_ONCE) } + if (this is ApiResponse.Failure.Error) { + onResult(this) + } + return this +} + +@OptIn(ExperimentalContracts::class) +inline fun ApiResponse.onError( + crossinline onResult: ApiResponse.Failure.Error.() -> Unit, +): ApiResponse { + contract { callsInPlace(onResult, InvocationKind.AT_MOST_ONCE) } + if (this is ApiResponse.Failure.Error) { + onResult(this) + } + return this +} + +@OptIn(ExperimentalContracts::class) +suspend inline fun ApiResponse.Failure.Error.suspendMap( + crossinline mapper: suspend (ApiResponse.Failure.Error) -> V, +): V { + contract { callsInPlace(mapper, InvocationKind.AT_MOST_ONCE) } + return mapper(this) +} + +@OptIn(ExperimentalContracts::class) +suspend inline fun ApiResponse.suspendOnException( + crossinline onResult: suspend ApiResponse.Failure.Exception.() -> Unit, +): ApiResponse { + contract { callsInPlace(onResult, InvocationKind.AT_MOST_ONCE) } + if (this is ApiResponse.Failure.Exception) { + onResult(this) + } + return this +} + +@OptIn(ExperimentalContracts::class) +inline fun ApiResponse.onException( + crossinline onResult: ApiResponse.Failure.Exception.() -> Unit, +): ApiResponse { + contract { callsInPlace(onResult, InvocationKind.AT_MOST_ONCE) } + if (this is ApiResponse.Failure.Exception) { + onResult(this) + } + return this +} + +@OptIn(ExperimentalContracts::class) +suspend inline fun ApiResponse.Failure.Exception.suspendMap( + crossinline mapper: suspend (ApiResponse.Failure.Exception) -> V, +): V { + contract { callsInPlace(mapper, InvocationKind.AT_MOST_ONCE) } + return mapper(this) +} From 4841a468b7d923988613cd664a23ca7cd53b604c Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:28:38 +0330 Subject: [PATCH 10/65] [refactor & feature] `Resource` class and introduce `Errors` sealed class This commit includes significant changes to error handling and API response management: 1. Removed Resource class from domain.model 2. Introduced a new Resource sealed class in the ktor module: - Generic type parameters for both success (T) and error (E) types - Success and Error as data classes for better pattern matching 3. Added a new Errors sealed class in the ktor module: - ApiError for API-specific errors with message and code - ExceptionError for general exceptions with message and optional throwable --- core/ktor/src/main/java/ir/composenews/ktor/Errors.kt | 8 ++++++++ core/ktor/src/main/java/ir/composenews/ktor/Resource.kt | 6 ++++++ .../main/java/ir/composenews/domain/model/Resource.kt | 9 --------- 3 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 core/ktor/src/main/java/ir/composenews/ktor/Errors.kt create mode 100644 core/ktor/src/main/java/ir/composenews/ktor/Resource.kt delete mode 100644 domain/market/src/main/java/ir/composenews/domain/model/Resource.kt diff --git a/core/ktor/src/main/java/ir/composenews/ktor/Errors.kt b/core/ktor/src/main/java/ir/composenews/ktor/Errors.kt new file mode 100644 index 00000000..255b5164 --- /dev/null +++ b/core/ktor/src/main/java/ir/composenews/ktor/Errors.kt @@ -0,0 +1,8 @@ + +package ir.composenews.ktor + +sealed class Errors { + data class ApiError(val message: String?, val code: Int) : Errors() + + data class ExceptionError(val message: String?, val throwable: Throwable? = null) : Errors() +} diff --git a/core/ktor/src/main/java/ir/composenews/ktor/Resource.kt b/core/ktor/src/main/java/ir/composenews/ktor/Resource.kt new file mode 100644 index 00000000..e4e630c2 --- /dev/null +++ b/core/ktor/src/main/java/ir/composenews/ktor/Resource.kt @@ -0,0 +1,6 @@ +package ir.composenews.ktor + +sealed class Resource { + data class Success(val data: T) : Resource() + data class Error(val error: E) : Resource() +} diff --git a/domain/market/src/main/java/ir/composenews/domain/model/Resource.kt b/domain/market/src/main/java/ir/composenews/domain/model/Resource.kt deleted file mode 100644 index 32cfee9b..00000000 --- a/domain/market/src/main/java/ir/composenews/domain/model/Resource.kt +++ /dev/null @@ -1,9 +0,0 @@ -package ir.composenews.domain.model - -sealed class Resource( - val data: T? = null, - val exception: Exception? = null, -) { - class Success(data: T) : Resource(data) - class Error(exception: Exception, data: T? = null) : Resource(data, exception) -} From 20119d52a7675f5b910f273651c531e7eeb08322 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:31:19 +0330 Subject: [PATCH 11/65] [feature] Add `StatusCode` to message mapping function --- .../main/java/ir/composenews/ktor/ErrorMapper.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 core/ktor/src/main/java/ir/composenews/ktor/ErrorMapper.kt diff --git a/core/ktor/src/main/java/ir/composenews/ktor/ErrorMapper.kt b/core/ktor/src/main/java/ir/composenews/ktor/ErrorMapper.kt new file mode 100644 index 00000000..c1c5bfcb --- /dev/null +++ b/core/ktor/src/main/java/ir/composenews/ktor/ErrorMapper.kt @@ -0,0 +1,16 @@ + +package ir.composenews.ktor + +fun StatusCode.mapMessageStatusCode(): String { + return when (this) { + StatusCode.Unknown -> "Unknown" + StatusCode.BadRequest -> "Bad Request" + StatusCode.Forbidden -> "Forbidden" + StatusCode.RequestTimeout -> "Request Timeout" + StatusCode.TooManyRequests -> "Too many Requests" + StatusCode.InternalServerError -> "Internal Server Error" + StatusCode.ServiceUnavailable -> "Service Unavailable" + StatusCode.AccessDenied -> "Access Denied" + StatusCode.LimitRequest -> "Limit Request" + } +} From e6e463a578a0fe9dc1c31569965773adc6196a2d Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:35:52 +0330 Subject: [PATCH 12/65] [refactor] Add dependency `core.ktor` module in market-remote --- data/market-remote/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/data/market-remote/build.gradle.kts b/data/market-remote/build.gradle.kts index 43283392..5d7cc910 100644 --- a/data/market-remote/build.gradle.kts +++ b/data/market-remote/build.gradle.kts @@ -14,6 +14,7 @@ android { } dependencies { + api(projects.core.ktor) libs.apply { implementation(bundles.ktor) From 4501c17c0366aff551207d673179f5804fe667f3 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:39:22 +0330 Subject: [PATCH 13/65] [refactor] Update `MarketsApi` to use ApiResponse wrapper and Update `MarketsApiImpl` to use ApiResponse and getApiResponse --- .../remotedatasource/api/MarketsApi.kt | 7 ++-- .../remotedatasource/api/MarketsApiImpl.kt | 32 +++++++++---------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt index c42c755c..73957a43 100644 --- a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt @@ -2,6 +2,7 @@ package ir.composenews.remotedatasource.api +import ir.composenews.ktor.ApiResponse import ir.composenews.remotedatasource.dto.MarketChartResponse import ir.composenews.remotedatasource.dto.MarketDetailResponse import ir.composenews.remotedatasource.dto.MarketResponse @@ -13,13 +14,13 @@ interface MarketsApi { perPage: Int, page: Int, sparkline: Boolean, - ): List + ): ApiResponse> suspend fun getMarketChart( id: String, currency: String, days: Int, - ): MarketChartResponse + ): ApiResponse - suspend fun getMarketDetail(id: String): MarketDetailResponse + suspend fun getMarketDetail(id: String): ApiResponse } diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt index a858a1e2..fe342806 100644 --- a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt @@ -1,9 +1,9 @@ package ir.composenews.remotedatasource.api import io.ktor.client.HttpClient -import io.ktor.client.call.body -import io.ktor.client.request.get import io.ktor.http.appendPathSegments +import ir.composenews.ktor.ApiResponse +import ir.composenews.ktor.getApiResponse import ir.composenews.remotedatasource.dto.MarketChartResponse import ir.composenews.remotedatasource.dto.MarketDetailResponse import ir.composenews.remotedatasource.dto.MarketResponse @@ -29,8 +29,8 @@ class MarketsApiImpl @Inject constructor( perPage: Int, page: Int, sparkline: Boolean, - ): List = withContext(Dispatchers.IO) { - val response = httpClient.get { + ): ApiResponse> = withContext(Dispatchers.IO) { + val response = httpClient.getApiResponse> { url { appendPathSegments(COINS, MARKETS) parameters.append(VS_CURRENCY, currency) @@ -40,33 +40,31 @@ class MarketsApiImpl @Inject constructor( parameters.append(SPARKLINE, sparkline.toString()) } } - - response.body() + response } override suspend fun getMarketChart( id: String, currency: String, days: Int, - ): MarketChartResponse = withContext(Dispatchers.IO) { - val response = httpClient.get { + ): ApiResponse = withContext(Dispatchers.IO) { + val response = httpClient.getApiResponse { url { appendPathSegments(COINS, id, MARKET_CHART) parameters.append(VS_CURRENCY, currency) parameters.append(DAYS, days.toString()) } } - - response.body() + response } - override suspend fun getMarketDetail(id: String): MarketDetailResponse = withContext(Dispatchers.IO) { - val response = httpClient.get { - url { - appendPathSegments(COINS, id) + override suspend fun getMarketDetail(id: String): ApiResponse = + withContext(Dispatchers.IO) { + val response = httpClient.getApiResponse { + url { + appendPathSegments(COINS, id) + } } + response } - - response.body() - } } From e4818eb14083396d84fa136e9ec17c9ae20179f5 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:40:46 +0330 Subject: [PATCH 14/65] [refactor] Update `FakeMarketsApi` to use ApiResponse wrapper --- .../ir/composenews/remotedatasource/test/FakeMarketsApi.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/test/FakeMarketsApi.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/test/FakeMarketsApi.kt index cd411e64..15825865 100644 --- a/data/market-remote/src/main/java/ir/composenews/remotedatasource/test/FakeMarketsApi.kt +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/test/FakeMarketsApi.kt @@ -1,5 +1,6 @@ package ir.composenews.remotedatasource.test +import ir.composenews.ktor.ApiResponse import ir.composenews.remotedatasource.api.MarketsApi import ir.composenews.remotedatasource.dto.MarketChartResponse import ir.composenews.remotedatasource.dto.MarketDetailResponse @@ -12,17 +13,17 @@ class FakeMarketsApi : MarketsApi { perPage: Int, page: Int, sparkline: Boolean, - ): List = listOf(marketDto) + ): ApiResponse> = ApiResponse.Success(listOf(marketDto)) override suspend fun getMarketChart( id: String, currency: String, days: Int, - ): MarketChartResponse { + ): ApiResponse { TODO("Not yet implemented") } - override suspend fun getMarketDetail(id: String): MarketDetailResponse { + override suspend fun getMarketDetail(id: String): ApiResponse { TODO("Not yet implemented") } } From 9180c445aa3c8152a41bf1bebd1722078dcf51ab Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:44:37 +0330 Subject: [PATCH 15/65] [refactor] Enhance `MarketRepositoryImpl` with improved error handling and Resource wrapper --- .../data/repository/MarketRepositoryImpl.kt | 101 ++++++++++++------ 1 file changed, 69 insertions(+), 32 deletions(-) diff --git a/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt b/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt index e6a6bb43..0755e86e 100644 --- a/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt +++ b/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt @@ -11,15 +11,23 @@ import ir.composenews.data.mapper.toRemoteMarketDto import ir.composenews.domain.model.Chart import ir.composenews.domain.model.Market import ir.composenews.domain.model.MarketDetail -import ir.composenews.domain.model.Resource import ir.composenews.domain.repository.MarketRepository +import ir.composenews.ktor.Errors +import ir.composenews.ktor.Resource +import ir.composenews.ktor.mapMessageStatusCode +import ir.composenews.ktor.onError +import ir.composenews.ktor.onException +import ir.composenews.ktor.statusCode +import ir.composenews.ktor.suspendMap +import ir.composenews.ktor.suspendOnError +import ir.composenews.ktor.suspendOnException +import ir.composenews.ktor.suspendOnSuccess import ir.composenews.localdatasource.database.MarketDao import ir.composenews.remotedatasource.api.MarketsApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map import javax.inject.Inject -import kotlin.coroutines.cancellation.CancellationException class MarketRepositoryImpl @Inject constructor( private val api: MarketsApi, @@ -33,24 +41,21 @@ class MarketRepositoryImpl @Inject constructor( dao.getFavoriteMarketList().map { list -> list.map { it.toMarket() } } override suspend fun syncMarketList() { - try { - val marketList = api.getMarkets( - "usd", - "market_cap_desc", - 20, - 1, - false, - ).map { it.toRemoteMarketDto() } - - dao.upsertMarket(marketList) - } catch (e: CancellationException) { - throw e - } catch (e: Exception) { - Log.d("debug", e.toString()) - /* coins/markets API has rate limit. We should decide what should we do in catch block. - {"status":{"error_code":429,"error_message":"You've exceeded the Rate Limit. - Please visit https://www.coingecko.com/en/api/pricing to subscribe to our API plans for higher rate limits."}} - */ + api.getMarkets( + "usd", + "market_cap_desc", + 20, + 1, + false, + ).suspendOnSuccess { + val toRemoteMarketDto = data.map { + it.toRemoteMarketDto() + } + dao.upsertMarket(toRemoteMarketDto) + }.onError { + Log.d("debug", message) + }.onException { + Log.d("debug", message.toString()) } } @@ -59,21 +64,53 @@ class MarketRepositoryImpl @Inject constructor( dao.insertMarket(news) } - override fun fetchChart(id: String): Flow> = flow { - try { - val chart = api.getMarketChart(id, "usd", 1).toChart() - emit(Resource.Success(chart)) - } catch (e: Exception) { - emit(Resource.Error(exception = e)) + override fun fetchChart(id: String): Flow> = flow { + val chart = api.getMarketChart(id, "usd", 1) + chart.suspendOnSuccess { + suspendMap { + emit(Resource.Success(it.data.toChart())) + } + }.suspendOnError { + suspendMap { + emit( + Resource.Error( + error = Errors.ApiError( + it.statusCode.mapMessageStatusCode(), + it.statusCode.code, + ), + ), + ) + } + }.suspendOnException { + suspendMap { + emit(Resource.Error(Errors.ExceptionError(it.message, throwable))) + } } } - override fun fetchDetail(id: String): Flow> = flow { - try { - val detail = api.getMarketDetail(id).toDetail() - emit(Resource.Success(detail)) - } catch (e: Exception) { - emit(Resource.Error(exception = e)) + override fun fetchDetail(id: String): Flow> = flow { + val detail = api.getMarketDetail(id) + detail.suspendOnSuccess { + suspendMap { + emit(Resource.Success(data.toDetail())) + } + }.suspendOnError { + suspendMap { + emit( + Resource.Error( + Errors.ApiError( + it.statusCode.mapMessageStatusCode(), + it.statusCode.code, + ), + ), + ) + } + }.suspendOnException { + suspendMap { + emit( + Resource.Error(Errors.ExceptionError(it.message, it.throwable)), + ) + } } } } From c8891e3e5a2aace4e63e39764b97cf84dc0836a1 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:46:43 +0330 Subject: [PATCH 16/65] [deps] Add core.ktor dependency to domain module --- domain/market/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/domain/market/build.gradle.kts b/domain/market/build.gradle.kts index 80e5ff2a..842ede9b 100644 --- a/domain/market/build.gradle.kts +++ b/domain/market/build.gradle.kts @@ -13,6 +13,7 @@ android { dependencies { api(projects.core.test) + api(projects.core.ktor) libs.apply { implementation(javax.inject) implementation(coroutines) From b9b4efa33ffc674d62eedae464f8c52727af3d58 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:48:10 +0330 Subject: [PATCH 17/65] [refactor] Update `MarketRepository` interface to use new Resource type --- .../ir/composenews/domain/repository/MarketRepository.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/domain/market/src/main/java/ir/composenews/domain/repository/MarketRepository.kt b/domain/market/src/main/java/ir/composenews/domain/repository/MarketRepository.kt index 056ae584..801d8cd0 100644 --- a/domain/market/src/main/java/ir/composenews/domain/repository/MarketRepository.kt +++ b/domain/market/src/main/java/ir/composenews/domain/repository/MarketRepository.kt @@ -3,7 +3,8 @@ package ir.composenews.domain.repository import ir.composenews.domain.model.Chart import ir.composenews.domain.model.Market import ir.composenews.domain.model.MarketDetail -import ir.composenews.domain.model.Resource +import ir.composenews.ktor.Errors +import ir.composenews.ktor.Resource import kotlinx.coroutines.flow.Flow interface MarketRepository { @@ -11,6 +12,6 @@ interface MarketRepository { fun getFavoriteMarketList(): Flow> suspend fun syncMarketList() suspend fun toggleFavoriteMarket(oldMarket: Market) - fun fetchChart(id: String): Flow> - fun fetchDetail(id: String): Flow> + fun fetchChart(id: String): Flow> + fun fetchDetail(id: String): Flow> } From bd0c944c2dbb1a70d6fc0fc1056e7c594088d665 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:50:27 +0330 Subject: [PATCH 18/65] [refactor] Update `GetMarketChartUseCase` and `GetMarketDetailUseCase` to use new Resource type --- .../ir/composenews/domain/use_case/GetMarketChartUseCase.kt | 6 ++++-- .../composenews/domain/use_case/GetMarketDetailUseCase.kt | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketChartUseCase.kt b/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketChartUseCase.kt index 593002eb..777565e0 100644 --- a/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketChartUseCase.kt +++ b/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketChartUseCase.kt @@ -3,13 +3,15 @@ package ir.composenews.domain.use_case import ir.composenews.domain.model.Chart -import ir.composenews.domain.model.Resource import ir.composenews.domain.repository.MarketRepository +import ir.composenews.ktor.Errors +import ir.composenews.ktor.Resource import kotlinx.coroutines.flow.Flow import javax.inject.Inject open class GetMarketChartUseCase @Inject constructor( private val repository: MarketRepository, ) { - open operator fun invoke(id: String): Flow> = repository.fetchChart(id = id) + open operator fun invoke(id: String): Flow> = + repository.fetchChart(id = id) } diff --git a/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketDetailUseCase.kt b/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketDetailUseCase.kt index 20906ac3..e3475e0d 100644 --- a/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketDetailUseCase.kt +++ b/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketDetailUseCase.kt @@ -3,13 +3,14 @@ package ir.composenews.domain.use_case import ir.composenews.domain.model.MarketDetail -import ir.composenews.domain.model.Resource import ir.composenews.domain.repository.MarketRepository +import ir.composenews.ktor.Errors +import ir.composenews.ktor.Resource import kotlinx.coroutines.flow.Flow import javax.inject.Inject open class GetMarketDetailUseCase @Inject constructor( private val repository: MarketRepository, ) { - open operator fun invoke(id: String): Flow> = repository.fetchDetail(id = id) + open operator fun invoke(id: String): Flow> = repository.fetchDetail(id = id) } From e9b0712a87bb9b77a8fb63b2b539c22d16a63ae9 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:55:57 +0330 Subject: [PATCH 19/65] [deps] Add ktor dependency to base module --- core/base/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/core/base/build.gradle.kts b/core/base/build.gradle.kts index 306ad39c..f83a44a0 100644 --- a/core/base/build.gradle.kts +++ b/core/base/build.gradle.kts @@ -10,6 +10,7 @@ android { dependencies { projects.library.apply { api(projects.core.test) + api(projects.core.ktor) implementation(projects.library.designsystem) } libs.apply { From ecd2af15ea9af194b9a3428c44e33dbcd6179c12 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:57:02 +0330 Subject: [PATCH 20/65] [refactor] Update `BaseContract` to use Errors type --- core/base/src/main/java/ir/composenews/base/BaseContract.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/base/src/main/java/ir/composenews/base/BaseContract.kt b/core/base/src/main/java/ir/composenews/base/BaseContract.kt index 67a819fc..79acf1e8 100644 --- a/core/base/src/main/java/ir/composenews/base/BaseContract.kt +++ b/core/base/src/main/java/ir/composenews/base/BaseContract.kt @@ -1,12 +1,14 @@ package ir.composenews.base +import ir.composenews.ktor.Errors + interface BaseContract : BaseUnidirectionalViewModel { sealed class BaseState { data object OnLoading : BaseState() data object OnLoadingDialog : BaseState() - data class OnError(val errorMessage: String) : BaseState() + data class OnError(val errors: Errors) : BaseState() data object OnSuccess : BaseState() } From 1666adaad42d8bc5f326a18cd0795bfa7a8141db Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:58:17 +0330 Subject: [PATCH 21/65] [refactor] Update BaseRoute to handle new Errors type --- .../main/java/ir/composenews/base/BaseScreen.kt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/base/src/main/java/ir/composenews/base/BaseScreen.kt b/core/base/src/main/java/ir/composenews/base/BaseScreen.kt index 7d219bf3..2954a5b1 100644 --- a/core/base/src/main/java/ir/composenews/base/BaseScreen.kt +++ b/core/base/src/main/java/ir/composenews/base/BaseScreen.kt @@ -15,6 +15,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import ir.composenews.designsystem.widget.ErrorView import ir.composenews.designsystem.widget.LoadingView +import ir.composenews.ktor.Errors @Composable fun BaseRoute( @@ -69,7 +70,7 @@ private fun BaseScreen( BaseContract.BaseState.OnLoadingDialog -> TODO() is BaseContract.BaseState.OnError -> { - ErrorView(errorMessage = targetState.errorMessage) + ErrorView(errorMessage = errorViewMapper(targetState.errors)) } BaseContract.BaseState.OnSuccess -> content() @@ -78,4 +79,16 @@ private fun BaseScreen( } } +fun errorViewMapper(errors: Errors): String { + return when (errors) { + is Errors.ApiError -> { + errors.message ?: "Unknown Error" + } + + is Errors.ExceptionError -> { + errors.message ?: "Unknown Error" + } + } +} + const val TRANSITION_DURATION = 500 From 3e788519271280e1b6052aacd13768d213d1d9af Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 21:59:33 +0330 Subject: [PATCH 22/65] [refactor] Update `MarketListViewModel` to use new Errors type --- .../java/ir/composenews/marketlist/MarketListViewModel.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListViewModel.kt b/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListViewModel.kt index fcf8565e..572eaf65 100644 --- a/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListViewModel.kt +++ b/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListViewModel.kt @@ -10,6 +10,7 @@ import ir.composenews.core_test.dispatcher.DispatcherProvider import ir.composenews.domain.use_case.GetFavoriteMarketListUseCase import ir.composenews.domain.use_case.GetMarketListUseCase import ir.composenews.domain.use_case.ToggleFavoriteMarketListUseCase +import ir.composenews.ktor.Errors import ir.composenews.uimarket.mapper.toMarket import ir.composenews.uimarket.mapper.toMarketModel import ir.composenews.uimarket.model.MarketModel @@ -81,8 +82,7 @@ class MarketListViewModel @Inject constructor( .catch { exception -> mutableBaseState.update { BaseContract.BaseState.OnError( - errorMessage = exception.localizedMessage - ?: "An unexpected error occurred.", + errors = Errors.ExceptionError(message = exception.message), ) } } From 1567ce2b94ace838a01889946b06518576249072 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 22:01:21 +0330 Subject: [PATCH 23/65] [refactor] Update `MarketDetailViewModel` to use new Errors type and Resource class --- .../marketdetail/MarketDetailViewModel.kt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailViewModel.kt b/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailViewModel.kt index fc399abc..6299079b 100644 --- a/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailViewModel.kt +++ b/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailViewModel.kt @@ -7,10 +7,11 @@ import dagger.hilt.android.lifecycle.HiltViewModel import ir.composenews.base.BaseContract import ir.composenews.base.BaseViewModel import ir.composenews.core_test.dispatcher.DispatcherProvider -import ir.composenews.domain.model.Resource import ir.composenews.domain.use_case.GetMarketChartUseCase import ir.composenews.domain.use_case.GetMarketDetailUseCase import ir.composenews.domain.use_case.ToggleFavoriteMarketListUseCase +import ir.composenews.ktor.Errors +import ir.composenews.ktor.Resource import ir.composenews.uimarket.mapper.toMarket import ir.composenews.uimarket.model.MarketModel import kotlinx.coroutines.flow.MutableStateFlow @@ -46,7 +47,7 @@ class MarketDetailViewModel @Inject constructor( getMarketDetailUseCase(id = id).onEach { result -> when (result) { is Resource.Success -> { - result.data?.let { detail -> + result.data.let { detail -> if (!isRefreshing) { mutableBaseState.update { BaseContract.BaseState.OnSuccess @@ -67,8 +68,7 @@ class MarketDetailViewModel @Inject constructor( is Resource.Error -> { mutableBaseState.update { BaseContract.BaseState.OnError( - errorMessage = result.exception?.localizedMessage - ?: "An unexpected error occurred.", + errors = result.error, ) } } @@ -76,7 +76,7 @@ class MarketDetailViewModel @Inject constructor( }.catch { exception -> mutableBaseState.update { BaseContract.BaseState.OnError( - errorMessage = exception.localizedMessage ?: "An unexpected error occurred.", + Errors.ExceptionError(message = exception.message), ) } }.launchIn(viewModelScope) @@ -114,7 +114,7 @@ class MarketDetailViewModel @Inject constructor( getMarketChartUseCase(id = id).onEach { result -> when (result) { is Resource.Success -> { - result.data?.let { chart -> + result.data.let { chart -> if (!isRefreshing) { mutableBaseState.update { BaseContract.BaseState.OnSuccess @@ -135,8 +135,7 @@ class MarketDetailViewModel @Inject constructor( is Resource.Error -> { mutableBaseState.update { BaseContract.BaseState.OnError( - errorMessage = result.exception?.localizedMessage - ?: "An unexpected error occurred.", + errors = result.error, ) } } @@ -144,7 +143,7 @@ class MarketDetailViewModel @Inject constructor( }.catch { exception -> mutableBaseState.update { BaseContract.BaseState.OnError( - errorMessage = exception.localizedMessage ?: "An unexpected error occurred.", + errors = Errors.ExceptionError(message = exception.message), ) } }.launchIn(viewModelScope) From ad1a759dfb2e658a4845a1c965589031e8e55741 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 22:02:31 +0330 Subject: [PATCH 24/65] [refactor] Update `MarketDetailScreenTest` to use new Resource and Errors types --- .../marketdetail/MarketDetailScreenTest.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/feature/marketdetail/src/androidTest/java/ir/composenews/marketdetail/MarketDetailScreenTest.kt b/feature/marketdetail/src/androidTest/java/ir/composenews/marketdetail/MarketDetailScreenTest.kt index 7f44b6e0..d891c9e7 100644 --- a/feature/marketdetail/src/androidTest/java/ir/composenews/marketdetail/MarketDetailScreenTest.kt +++ b/feature/marketdetail/src/androidTest/java/ir/composenews/marketdetail/MarketDetailScreenTest.kt @@ -1,3 +1,4 @@ + package ir.composenews.marketdetail import androidx.compose.ui.test.junit4.createComposeRule @@ -8,11 +9,12 @@ import ir.composenews.core_test.dispatcher.DispatcherProvider import ir.composenews.domain.model.Chart import ir.composenews.domain.model.Market import ir.composenews.domain.model.MarketDetail -import ir.composenews.domain.model.Resource import ir.composenews.domain.repository.MarketRepository import ir.composenews.domain.use_case.GetMarketChartUseCase import ir.composenews.domain.use_case.GetMarketDetailUseCase import ir.composenews.domain.use_case.ToggleFavoriteMarketListUseCase +import ir.composenews.ktor.Errors +import ir.composenews.ktor.Resource import ir.composenews.uimarket.model.MarketModel import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.CoroutineDispatcher @@ -44,11 +46,11 @@ class MarketDetailScreenTest { TODO("Not yet implemented") } - override fun fetchChart(id: String): Flow> { + override fun fetchChart(id: String): Flow> { TODO("Not yet implemented") } - override fun fetchDetail(id: String): Flow> { + override fun fetchDetail(id: String): Flow> { TODO("Not yet implemented") } } @@ -56,14 +58,14 @@ class MarketDetailScreenTest { private fun createMockViewModel(): MarketDetailViewModel { val fakeGetMarketChartUseCase = object : GetMarketChartUseCase(fakeMarketRepository) { - override fun invoke(id: String): Flow> { + override fun invoke(id: String): Flow> { return flowOf(Resource.Success(Chart(persistentListOf(Pair(0, 50000.0))))) } } val fakeGetMarketDetailUseCase = object : GetMarketDetailUseCase(fakeMarketRepository) { - override fun invoke(id: String): Flow> { + override fun invoke(id: String): Flow> { return flowOf(Resource.Success(MarketDetail(marketCapRank = 1))) } } From 8452baeee770df64163602bdf0ec7f844d92054c Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sat, 31 Aug 2024 22:03:58 +0330 Subject: [PATCH 25/65] [refactor] Update `MarketDetailViewModelTest` to use new Errors type in Resource --- .../marketdetail/MarketDetailViewModelTest.kt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/feature/marketdetail/src/test/java/ir/composenews/marketdetail/MarketDetailViewModelTest.kt b/feature/marketdetail/src/test/java/ir/composenews/marketdetail/MarketDetailViewModelTest.kt index 69d0715f..863ea610 100644 --- a/feature/marketdetail/src/test/java/ir/composenews/marketdetail/MarketDetailViewModelTest.kt +++ b/feature/marketdetail/src/test/java/ir/composenews/marketdetail/MarketDetailViewModelTest.kt @@ -10,10 +10,11 @@ import ir.composenews.base.BaseContract import ir.composenews.core_test.MainCoroutineListener import ir.composenews.core_test.dispatcher.TestDispatcherProvider import ir.composenews.domain.model.Chart -import ir.composenews.domain.model.Resource import ir.composenews.domain.use_case.GetMarketChartUseCase import ir.composenews.domain.use_case.GetMarketDetailUseCase import ir.composenews.domain.use_case.ToggleFavoriteMarketListUseCase +import ir.composenews.ktor.Errors +import ir.composenews.ktor.Resource import ir.composenews.uimarket.mapper.toMarket import ir.composenews.uimarket.model.MarketModel import kotlinx.collections.immutable.persistentListOf @@ -111,8 +112,12 @@ class MarketDetailViewModelTest : StringSpec({ "Get market chart with force refresh is false returns error" { runTest { val market = provideFakeMarket() - val chart = provideFakeChart() - val chartResult = Resource.Error(SocketTimeoutException(), chart) + val chartResult = Resource.Error( + Errors.ExceptionError( + "Socket Timeout Exception", + throwable = SocketTimeoutException(), + ), + ) coEvery { getMarketChartUseCase.invoke(any()) } returns flowOf(chartResult) From e5bf750078de6deb5a32a2bc93959192dca94957 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sun, 1 Sep 2024 16:48:41 +0330 Subject: [PATCH 26/65] [refactor] Add `composenews.android.library` into libs.toml file https://github.com/Kaaveh/ComposeNews/pull/219#discussion_r1739971758 --- gradle/libs.versions.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5fb11e88..bec3069a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -152,6 +152,7 @@ kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", vers detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } kotliner = { id = "org.jmailen.kotlinter", version.ref = "kotlinter" } sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } +composenews-android-library = { id = "composenews.android.library", version = "unspecified" } [bundles] compose = [ From e6c60419bb98509b11728840b054c56dc80cee9f Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sun, 1 Sep 2024 16:53:41 +0330 Subject: [PATCH 27/65] [refactor] Move core:ktor module to core:network:ktor - Transferred all contents from core:ktor to the core:network:ktor module https://github.com/Kaaveh/ComposeNews/pull/219#discussion_r1739951830 --- core/ktor/src/main/AndroidManifest.xml | 2 -- core/{ => network}/ktor/.gitignore | 0 core/{ => network}/ktor/build.gradle.kts | 2 +- .../ktor/src/main/java/ir/composenews/network}/ApiResponse.kt | 2 +- .../main/java/ir/composenews/network}/ApiResponseExtension.kt | 2 +- .../ktor/src/main/java/ir/composenews/network}/ErrorMapper.kt | 2 +- .../ktor/src/main/java/ir/composenews/network}/Errors.kt | 2 +- .../main/java/ir/composenews/network}/HttpClientExtension.kt | 2 +- .../ktor/src/main/java/ir/composenews/network}/Resource.kt | 2 +- .../main/java/ir/composenews/network}/ResponseTransformer.kt | 2 +- .../ktor/src/main/java/ir/composenews/network}/StatusCode.kt | 2 +- settings.gradle | 2 +- 12 files changed, 10 insertions(+), 12 deletions(-) delete mode 100644 core/ktor/src/main/AndroidManifest.xml rename core/{ => network}/ktor/.gitignore (100%) rename core/{ => network}/ktor/build.gradle.kts (80%) rename core/{ktor/src/main/java/ir/composenews/ktor => network/ktor/src/main/java/ir/composenews/network}/ApiResponse.kt (96%) rename core/{ktor/src/main/java/ir/composenews/ktor => network/ktor/src/main/java/ir/composenews/network}/ApiResponseExtension.kt (96%) rename core/{ktor/src/main/java/ir/composenews/ktor => network/ktor/src/main/java/ir/composenews/network}/ErrorMapper.kt (94%) rename core/{ktor/src/main/java/ir/composenews/ktor => network/ktor/src/main/java/ir/composenews/network}/Errors.kt (86%) rename core/{ktor/src/main/java/ir/composenews/ktor => network/ktor/src/main/java/ir/composenews/network}/HttpClientExtension.kt (94%) rename core/{ktor/src/main/java/ir/composenews/ktor => network/ktor/src/main/java/ir/composenews/network}/Resource.kt (85%) rename core/{ktor/src/main/java/ir/composenews/ktor => network/ktor/src/main/java/ir/composenews/network}/ResponseTransformer.kt (98%) rename core/{ktor/src/main/java/ir/composenews/ktor => network/ktor/src/main/java/ir/composenews/network}/StatusCode.kt (91%) diff --git a/core/ktor/src/main/AndroidManifest.xml b/core/ktor/src/main/AndroidManifest.xml deleted file mode 100644 index fa57d87f..00000000 --- a/core/ktor/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/core/ktor/.gitignore b/core/network/ktor/.gitignore similarity index 100% rename from core/ktor/.gitignore rename to core/network/ktor/.gitignore diff --git a/core/ktor/build.gradle.kts b/core/network/ktor/build.gradle.kts similarity index 80% rename from core/ktor/build.gradle.kts rename to core/network/ktor/build.gradle.kts index 37c9f279..e8bee9df 100644 --- a/core/ktor/build.gradle.kts +++ b/core/network/ktor/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("composenews.android.library") + alias(libs.plugins.composenews.android.library) libs.plugins.apply { alias(kotlinx.serialization) } diff --git a/core/ktor/src/main/java/ir/composenews/ktor/ApiResponse.kt b/core/network/ktor/src/main/java/ir/composenews/network/ApiResponse.kt similarity index 96% rename from core/ktor/src/main/java/ir/composenews/ktor/ApiResponse.kt rename to core/network/ktor/src/main/java/ir/composenews/network/ApiResponse.kt index 37609f97..d62216e6 100644 --- a/core/ktor/src/main/java/ir/composenews/ktor/ApiResponse.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/ApiResponse.kt @@ -1,4 +1,4 @@ -package ir.composenews.ktor +package ir.composenews.network sealed interface ApiResponse { data class Success(val data: T) : ApiResponse diff --git a/core/ktor/src/main/java/ir/composenews/ktor/ApiResponseExtension.kt b/core/network/ktor/src/main/java/ir/composenews/network/ApiResponseExtension.kt similarity index 96% rename from core/ktor/src/main/java/ir/composenews/ktor/ApiResponseExtension.kt rename to core/network/ktor/src/main/java/ir/composenews/network/ApiResponseExtension.kt index 7a189c56..008a5489 100644 --- a/core/ktor/src/main/java/ir/composenews/ktor/ApiResponseExtension.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/ApiResponseExtension.kt @@ -1,5 +1,5 @@ -package ir.composenews.ktor +package ir.composenews.network import io.ktor.client.call.body import io.ktor.client.statement.HttpResponse diff --git a/core/ktor/src/main/java/ir/composenews/ktor/ErrorMapper.kt b/core/network/ktor/src/main/java/ir/composenews/network/ErrorMapper.kt similarity index 94% rename from core/ktor/src/main/java/ir/composenews/ktor/ErrorMapper.kt rename to core/network/ktor/src/main/java/ir/composenews/network/ErrorMapper.kt index c1c5bfcb..dff3dee2 100644 --- a/core/ktor/src/main/java/ir/composenews/ktor/ErrorMapper.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/ErrorMapper.kt @@ -1,5 +1,5 @@ -package ir.composenews.ktor +package ir.composenews.network fun StatusCode.mapMessageStatusCode(): String { return when (this) { diff --git a/core/ktor/src/main/java/ir/composenews/ktor/Errors.kt b/core/network/ktor/src/main/java/ir/composenews/network/Errors.kt similarity index 86% rename from core/ktor/src/main/java/ir/composenews/ktor/Errors.kt rename to core/network/ktor/src/main/java/ir/composenews/network/Errors.kt index 255b5164..4a13a733 100644 --- a/core/ktor/src/main/java/ir/composenews/ktor/Errors.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/Errors.kt @@ -1,5 +1,5 @@ -package ir.composenews.ktor +package ir.composenews.network sealed class Errors { data class ApiError(val message: String?, val code: Int) : Errors() diff --git a/core/ktor/src/main/java/ir/composenews/ktor/HttpClientExtension.kt b/core/network/ktor/src/main/java/ir/composenews/network/HttpClientExtension.kt similarity index 94% rename from core/ktor/src/main/java/ir/composenews/ktor/HttpClientExtension.kt rename to core/network/ktor/src/main/java/ir/composenews/network/HttpClientExtension.kt index 1955465b..af98690d 100644 --- a/core/ktor/src/main/java/ir/composenews/ktor/HttpClientExtension.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/HttpClientExtension.kt @@ -1,4 +1,4 @@ -package ir.composenews.ktor +package ir.composenews.network import io.ktor.client.HttpClient import io.ktor.client.request.HttpRequestBuilder diff --git a/core/ktor/src/main/java/ir/composenews/ktor/Resource.kt b/core/network/ktor/src/main/java/ir/composenews/network/Resource.kt similarity index 85% rename from core/ktor/src/main/java/ir/composenews/ktor/Resource.kt rename to core/network/ktor/src/main/java/ir/composenews/network/Resource.kt index e4e630c2..481cace6 100644 --- a/core/ktor/src/main/java/ir/composenews/ktor/Resource.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/Resource.kt @@ -1,4 +1,4 @@ -package ir.composenews.ktor +package ir.composenews.network sealed class Resource { data class Success(val data: T) : Resource() diff --git a/core/ktor/src/main/java/ir/composenews/ktor/ResponseTransformer.kt b/core/network/ktor/src/main/java/ir/composenews/network/ResponseTransformer.kt similarity index 98% rename from core/ktor/src/main/java/ir/composenews/ktor/ResponseTransformer.kt rename to core/network/ktor/src/main/java/ir/composenews/network/ResponseTransformer.kt index e1db0db5..953b0869 100644 --- a/core/ktor/src/main/java/ir/composenews/ktor/ResponseTransformer.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/ResponseTransformer.kt @@ -1,5 +1,5 @@ -package ir.composenews.ktor +package ir.composenews.network import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind diff --git a/core/ktor/src/main/java/ir/composenews/ktor/StatusCode.kt b/core/network/ktor/src/main/java/ir/composenews/network/StatusCode.kt similarity index 91% rename from core/ktor/src/main/java/ir/composenews/ktor/StatusCode.kt rename to core/network/ktor/src/main/java/ir/composenews/network/StatusCode.kt index 82adc53b..fcadf693 100644 --- a/core/ktor/src/main/java/ir/composenews/ktor/StatusCode.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/StatusCode.kt @@ -1,5 +1,5 @@ -package ir.composenews.ktor +package ir.composenews.network /** * https://docs.coingecko.com/reference/common-errors-rate-limit diff --git a/settings.gradle b/settings.gradle index 4446c27c..9ef3b95d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -22,7 +22,7 @@ include ':core:test' include ':core:base' include ':core:uimarket' include ':core:extensions' -include ':core:ktor' +include ':core:network:ktor' include ':domain:market' include ':data:market-remote' include ':data:market-local' From 7d6bdfd1f752d0dd2ba8b1439440af3b1aaad546 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Sun, 1 Sep 2024 16:58:34 +0330 Subject: [PATCH 28/65] [refactor] Update imports and Gradle files after `core:ktor` module relocation --- core/base/build.gradle.kts | 2 +- .../java/ir/composenews/base/BaseContract.kt | 2 +- .../java/ir/composenews/base/BaseScreen.kt | 2 +- data/market-remote/build.gradle.kts | 2 +- .../remotedatasource/api/MarketsApi.kt | 2 +- .../remotedatasource/api/MarketsApiImpl.kt | 4 ++-- .../remotedatasource/test/FakeMarketsApi.kt | 2 +- .../data/repository/MarketRepositoryImpl.kt | 20 +++++++++---------- domain/market/build.gradle.kts | 2 +- .../domain/repository/MarketRepository.kt | 4 ++-- .../domain/use_case/GetMarketChartUseCase.kt | 4 ++-- .../domain/use_case/GetMarketDetailUseCase.kt | 4 ++-- .../marketdetail/MarketDetailScreenTest.kt | 4 ++-- .../marketdetail/MarketDetailViewModel.kt | 4 ++-- .../marketdetail/MarketDetailViewModelTest.kt | 4 ++-- .../marketlist/MarketListViewModel.kt | 2 +- 16 files changed, 32 insertions(+), 32 deletions(-) diff --git a/core/base/build.gradle.kts b/core/base/build.gradle.kts index f83a44a0..855e5b58 100644 --- a/core/base/build.gradle.kts +++ b/core/base/build.gradle.kts @@ -10,7 +10,7 @@ android { dependencies { projects.library.apply { api(projects.core.test) - api(projects.core.ktor) + api(projects.core.network.ktor) implementation(projects.library.designsystem) } libs.apply { diff --git a/core/base/src/main/java/ir/composenews/base/BaseContract.kt b/core/base/src/main/java/ir/composenews/base/BaseContract.kt index 79acf1e8..b64ae959 100644 --- a/core/base/src/main/java/ir/composenews/base/BaseContract.kt +++ b/core/base/src/main/java/ir/composenews/base/BaseContract.kt @@ -1,6 +1,6 @@ package ir.composenews.base -import ir.composenews.ktor.Errors +import ir.composenews.network.Errors interface BaseContract : BaseUnidirectionalViewModel { diff --git a/core/base/src/main/java/ir/composenews/base/BaseScreen.kt b/core/base/src/main/java/ir/composenews/base/BaseScreen.kt index 2954a5b1..4dacad05 100644 --- a/core/base/src/main/java/ir/composenews/base/BaseScreen.kt +++ b/core/base/src/main/java/ir/composenews/base/BaseScreen.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import ir.composenews.designsystem.widget.ErrorView import ir.composenews.designsystem.widget.LoadingView -import ir.composenews.ktor.Errors +import ir.composenews.network.Errors @Composable fun BaseRoute( diff --git a/data/market-remote/build.gradle.kts b/data/market-remote/build.gradle.kts index 5d7cc910..dda45540 100644 --- a/data/market-remote/build.gradle.kts +++ b/data/market-remote/build.gradle.kts @@ -14,7 +14,7 @@ android { } dependencies { - api(projects.core.ktor) + api(projects.core.network.ktor) libs.apply { implementation(bundles.ktor) diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt index 73957a43..c51310b9 100644 --- a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApi.kt @@ -2,7 +2,7 @@ package ir.composenews.remotedatasource.api -import ir.composenews.ktor.ApiResponse +import ir.composenews.network.ApiResponse import ir.composenews.remotedatasource.dto.MarketChartResponse import ir.composenews.remotedatasource.dto.MarketDetailResponse import ir.composenews.remotedatasource.dto.MarketResponse diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt index fe342806..fd0c0c9b 100644 --- a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt @@ -2,8 +2,8 @@ package ir.composenews.remotedatasource.api import io.ktor.client.HttpClient import io.ktor.http.appendPathSegments -import ir.composenews.ktor.ApiResponse -import ir.composenews.ktor.getApiResponse +import ir.composenews.network.ApiResponse +import ir.composenews.network.getApiResponse import ir.composenews.remotedatasource.dto.MarketChartResponse import ir.composenews.remotedatasource.dto.MarketDetailResponse import ir.composenews.remotedatasource.dto.MarketResponse diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/test/FakeMarketsApi.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/test/FakeMarketsApi.kt index 15825865..35c253df 100644 --- a/data/market-remote/src/main/java/ir/composenews/remotedatasource/test/FakeMarketsApi.kt +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/test/FakeMarketsApi.kt @@ -1,6 +1,6 @@ package ir.composenews.remotedatasource.test -import ir.composenews.ktor.ApiResponse +import ir.composenews.network.ApiResponse import ir.composenews.remotedatasource.api.MarketsApi import ir.composenews.remotedatasource.dto.MarketChartResponse import ir.composenews.remotedatasource.dto.MarketDetailResponse diff --git a/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt b/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt index 0755e86e..fbc41205 100644 --- a/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt +++ b/data/market-repository/src/main/java/ir/composenews/data/repository/MarketRepositoryImpl.kt @@ -12,17 +12,17 @@ import ir.composenews.domain.model.Chart import ir.composenews.domain.model.Market import ir.composenews.domain.model.MarketDetail import ir.composenews.domain.repository.MarketRepository -import ir.composenews.ktor.Errors -import ir.composenews.ktor.Resource -import ir.composenews.ktor.mapMessageStatusCode -import ir.composenews.ktor.onError -import ir.composenews.ktor.onException -import ir.composenews.ktor.statusCode -import ir.composenews.ktor.suspendMap -import ir.composenews.ktor.suspendOnError -import ir.composenews.ktor.suspendOnException -import ir.composenews.ktor.suspendOnSuccess import ir.composenews.localdatasource.database.MarketDao +import ir.composenews.network.Errors +import ir.composenews.network.Resource +import ir.composenews.network.mapMessageStatusCode +import ir.composenews.network.onError +import ir.composenews.network.onException +import ir.composenews.network.statusCode +import ir.composenews.network.suspendMap +import ir.composenews.network.suspendOnError +import ir.composenews.network.suspendOnException +import ir.composenews.network.suspendOnSuccess import ir.composenews.remotedatasource.api.MarketsApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow diff --git a/domain/market/build.gradle.kts b/domain/market/build.gradle.kts index 842ede9b..5e786072 100644 --- a/domain/market/build.gradle.kts +++ b/domain/market/build.gradle.kts @@ -13,7 +13,7 @@ android { dependencies { api(projects.core.test) - api(projects.core.ktor) + api(projects.core.network.ktor) libs.apply { implementation(javax.inject) implementation(coroutines) diff --git a/domain/market/src/main/java/ir/composenews/domain/repository/MarketRepository.kt b/domain/market/src/main/java/ir/composenews/domain/repository/MarketRepository.kt index 801d8cd0..b44f94d9 100644 --- a/domain/market/src/main/java/ir/composenews/domain/repository/MarketRepository.kt +++ b/domain/market/src/main/java/ir/composenews/domain/repository/MarketRepository.kt @@ -3,8 +3,8 @@ package ir.composenews.domain.repository import ir.composenews.domain.model.Chart import ir.composenews.domain.model.Market import ir.composenews.domain.model.MarketDetail -import ir.composenews.ktor.Errors -import ir.composenews.ktor.Resource +import ir.composenews.network.Errors +import ir.composenews.network.Resource import kotlinx.coroutines.flow.Flow interface MarketRepository { diff --git a/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketChartUseCase.kt b/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketChartUseCase.kt index 777565e0..0f4b1da3 100644 --- a/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketChartUseCase.kt +++ b/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketChartUseCase.kt @@ -4,8 +4,8 @@ package ir.composenews.domain.use_case import ir.composenews.domain.model.Chart import ir.composenews.domain.repository.MarketRepository -import ir.composenews.ktor.Errors -import ir.composenews.ktor.Resource +import ir.composenews.network.Errors +import ir.composenews.network.Resource import kotlinx.coroutines.flow.Flow import javax.inject.Inject diff --git a/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketDetailUseCase.kt b/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketDetailUseCase.kt index e3475e0d..6a10d9f2 100644 --- a/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketDetailUseCase.kt +++ b/domain/market/src/main/java/ir/composenews/domain/use_case/GetMarketDetailUseCase.kt @@ -4,8 +4,8 @@ package ir.composenews.domain.use_case import ir.composenews.domain.model.MarketDetail import ir.composenews.domain.repository.MarketRepository -import ir.composenews.ktor.Errors -import ir.composenews.ktor.Resource +import ir.composenews.network.Errors +import ir.composenews.network.Resource import kotlinx.coroutines.flow.Flow import javax.inject.Inject diff --git a/feature/marketdetail/src/androidTest/java/ir/composenews/marketdetail/MarketDetailScreenTest.kt b/feature/marketdetail/src/androidTest/java/ir/composenews/marketdetail/MarketDetailScreenTest.kt index d891c9e7..49f9bb37 100644 --- a/feature/marketdetail/src/androidTest/java/ir/composenews/marketdetail/MarketDetailScreenTest.kt +++ b/feature/marketdetail/src/androidTest/java/ir/composenews/marketdetail/MarketDetailScreenTest.kt @@ -13,8 +13,8 @@ import ir.composenews.domain.repository.MarketRepository import ir.composenews.domain.use_case.GetMarketChartUseCase import ir.composenews.domain.use_case.GetMarketDetailUseCase import ir.composenews.domain.use_case.ToggleFavoriteMarketListUseCase -import ir.composenews.ktor.Errors -import ir.composenews.ktor.Resource +import ir.composenews.network.Errors +import ir.composenews.network.Resource import ir.composenews.uimarket.model.MarketModel import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.CoroutineDispatcher diff --git a/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailViewModel.kt b/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailViewModel.kt index 6299079b..b3c3f7d5 100644 --- a/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailViewModel.kt +++ b/feature/marketdetail/src/main/java/ir/composenews/marketdetail/MarketDetailViewModel.kt @@ -10,8 +10,8 @@ import ir.composenews.core_test.dispatcher.DispatcherProvider import ir.composenews.domain.use_case.GetMarketChartUseCase import ir.composenews.domain.use_case.GetMarketDetailUseCase import ir.composenews.domain.use_case.ToggleFavoriteMarketListUseCase -import ir.composenews.ktor.Errors -import ir.composenews.ktor.Resource +import ir.composenews.network.Errors +import ir.composenews.network.Resource import ir.composenews.uimarket.mapper.toMarket import ir.composenews.uimarket.model.MarketModel import kotlinx.coroutines.flow.MutableStateFlow diff --git a/feature/marketdetail/src/test/java/ir/composenews/marketdetail/MarketDetailViewModelTest.kt b/feature/marketdetail/src/test/java/ir/composenews/marketdetail/MarketDetailViewModelTest.kt index 863ea610..62e8a1f8 100644 --- a/feature/marketdetail/src/test/java/ir/composenews/marketdetail/MarketDetailViewModelTest.kt +++ b/feature/marketdetail/src/test/java/ir/composenews/marketdetail/MarketDetailViewModelTest.kt @@ -13,8 +13,8 @@ import ir.composenews.domain.model.Chart import ir.composenews.domain.use_case.GetMarketChartUseCase import ir.composenews.domain.use_case.GetMarketDetailUseCase import ir.composenews.domain.use_case.ToggleFavoriteMarketListUseCase -import ir.composenews.ktor.Errors -import ir.composenews.ktor.Resource +import ir.composenews.network.Errors +import ir.composenews.network.Resource import ir.composenews.uimarket.mapper.toMarket import ir.composenews.uimarket.model.MarketModel import kotlinx.collections.immutable.persistentListOf diff --git a/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListViewModel.kt b/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListViewModel.kt index 572eaf65..8198cfb4 100644 --- a/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListViewModel.kt +++ b/feature/marketlist/src/main/java/ir/composenews/marketlist/MarketListViewModel.kt @@ -10,7 +10,7 @@ import ir.composenews.core_test.dispatcher.DispatcherProvider import ir.composenews.domain.use_case.GetFavoriteMarketListUseCase import ir.composenews.domain.use_case.GetMarketListUseCase import ir.composenews.domain.use_case.ToggleFavoriteMarketListUseCase -import ir.composenews.ktor.Errors +import ir.composenews.network.Errors import ir.composenews.uimarket.mapper.toMarket import ir.composenews.uimarket.mapper.toMarketModel import ir.composenews.uimarket.model.MarketModel From 8980a801b5d8f339b163366deea5e41102129bd7 Mon Sep 17 00:00:00 2001 From: Mohamad Rezaei Date: Mon, 2 Sep 2024 13:38:36 +0330 Subject: [PATCH 29/65] [refactor] Change method name https://github.com/Kaaveh/ComposeNews/pull/219#discussion_r1739972415 --- .../java/ir/composenews/network/HttpClientExtension.kt | 6 +++--- .../ir/composenews/remotedatasource/api/MarketsApiImpl.kt | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/network/ktor/src/main/java/ir/composenews/network/HttpClientExtension.kt b/core/network/ktor/src/main/java/ir/composenews/network/HttpClientExtension.kt index af98690d..ca7804a4 100644 --- a/core/network/ktor/src/main/java/ir/composenews/network/HttpClientExtension.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/HttpClientExtension.kt @@ -5,13 +5,13 @@ import io.ktor.client.request.HttpRequestBuilder import io.ktor.client.request.request import io.ktor.http.HttpMethod -suspend inline fun HttpClient.getApiResponse( +suspend inline fun HttpClient.get( builder: HttpRequestBuilder, ): ApiResponse { builder.method = HttpMethod.Get return apiResponseOf { request(builder) } } -suspend inline fun HttpClient.getApiResponse( +suspend inline fun HttpClient.get( block: HttpRequestBuilder.() -> Unit, -): ApiResponse = getApiResponse(HttpRequestBuilder().apply(block)) +): ApiResponse = this.get(HttpRequestBuilder().apply(block)) diff --git a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt index fd0c0c9b..b135443f 100644 --- a/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt +++ b/data/market-remote/src/main/java/ir/composenews/remotedatasource/api/MarketsApiImpl.kt @@ -3,7 +3,7 @@ package ir.composenews.remotedatasource.api import io.ktor.client.HttpClient import io.ktor.http.appendPathSegments import ir.composenews.network.ApiResponse -import ir.composenews.network.getApiResponse +import ir.composenews.network.get import ir.composenews.remotedatasource.dto.MarketChartResponse import ir.composenews.remotedatasource.dto.MarketDetailResponse import ir.composenews.remotedatasource.dto.MarketResponse @@ -30,7 +30,7 @@ class MarketsApiImpl @Inject constructor( page: Int, sparkline: Boolean, ): ApiResponse> = withContext(Dispatchers.IO) { - val response = httpClient.getApiResponse> { + val response = httpClient.get> { url { appendPathSegments(COINS, MARKETS) parameters.append(VS_CURRENCY, currency) @@ -48,7 +48,7 @@ class MarketsApiImpl @Inject constructor( currency: String, days: Int, ): ApiResponse = withContext(Dispatchers.IO) { - val response = httpClient.getApiResponse { + val response = httpClient.get { url { appendPathSegments(COINS, id, MARKET_CHART) parameters.append(VS_CURRENCY, currency) @@ -60,7 +60,7 @@ class MarketsApiImpl @Inject constructor( override suspend fun getMarketDetail(id: String): ApiResponse = withContext(Dispatchers.IO) { - val response = httpClient.getApiResponse { + val response = httpClient.get { url { appendPathSegments(COINS, id) } From 680d4984bbccd73d99ffbb051840bd3c8f9d7472 Mon Sep 17 00:00:00 2001 From: Vahid Garousi Date: Fri, 6 Sep 2024 09:25:42 +0330 Subject: [PATCH 30/65] #1234 Add Konsist configuration and test setup --- gradle/libs.versions.toml | 2 + konsist/.gitignore | 1 + konsist/build.gradle.kts | 13 +++++ .../composenews/konsist/KonsistUseCaseTest.kt | 51 +++++++++++++++++++ settings.gradle | 1 + 5 files changed, 68 insertions(+) create mode 100644 konsist/.gitignore create mode 100644 konsist/build.gradle.kts create mode 100644 konsist/src/test/java/ir/composenews/konsist/KonsistUseCaseTest.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bec3069a..3ddc0429 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,6 +10,7 @@ kotlin = "1.9.23" kotlinter = "3.16.0" ksp = "1.9.10-1.0.13" kotlinxImmutableCollection = "0.3.5" +konsist = "0.16.0" androidGradlePlugin = "8.1.4" ktx = "1.12.0" @@ -87,6 +88,7 @@ javax-inject = { group = "javax.inject", name = "javax.inject", version.ref = "j coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core-jvm", version.ref = "coroutinesCore" } +konsist = { module = "com.lemonappdev:konsist", version.ref = "konsist" } lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifeCycle" } lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifeCycleViewModelKtx" } lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "lifeCycleRuntimeCompose" } diff --git a/konsist/.gitignore b/konsist/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/konsist/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/konsist/build.gradle.kts b/konsist/build.gradle.kts new file mode 100644 index 00000000..aaa86a59 --- /dev/null +++ b/konsist/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + alias(libs.plugins.composenews.android.library) +} + +android { + namespace = "ir.composenews.konsist" + +} + +dependencies { + testImplementation(libs.konsist) + testImplementation(libs.bundles.kotest) +} \ No newline at end of file diff --git a/konsist/src/test/java/ir/composenews/konsist/KonsistUseCaseTest.kt b/konsist/src/test/java/ir/composenews/konsist/KonsistUseCaseTest.kt new file mode 100644 index 00000000..5b7466c2 --- /dev/null +++ b/konsist/src/test/java/ir/composenews/konsist/KonsistUseCaseTest.kt @@ -0,0 +1,51 @@ +package ir.composenews.konsist + +import com.lemonappdev.konsist.api.Konsist +import com.lemonappdev.konsist.api.verify.assertTrue +import io.kotest.core.spec.style.AnnotationSpec + +class KonsistUseCaseTest : AnnotationSpec() { + private val domainModuleUseCasesScope = Konsist + .scopeFromProject( + moduleName = "domain/market", + sourceSetName = "main" + ) + .classes() + .filter { it.resideInPackage("..use_case..") } + + @Test + fun `every use case has name ending with 'UseCase'`() { + domainModuleUseCasesScope + .assertTrue { + it.hasNameEndingWith("UseCase") + } + } + + @Test + fun `every use case has operator method name 'invoke'`() { + domainModuleUseCasesScope + .assertTrue { + it.hasFunction { function -> + function.name == "invoke" && function.hasOperatorModifier + } + } + } + + @Test + fun `every use case has only one public method 'invoke'`() { + domainModuleUseCasesScope + .assertTrue { + it.countFunctions { item -> + item.hasPublicOrDefaultModifier + } == 1 + } + } + + @Test + fun `every use case is public`() { + domainModuleUseCasesScope + .assertTrue { + it.hasPublicOrDefaultModifier + } + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 9ef3b95d..dbe322f8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -30,3 +30,4 @@ include ':data:market-repository' include ':feature:marketlist' include ':feature:marketdetail' include ':app' +include ':konsist' From 3a1f3e0dfb8756ccffd9785d4bd303dafdb53be0 Mon Sep 17 00:00:00 2001 From: Vahid Garousi Date: Sat, 7 Sep 2024 10:07:59 +0330 Subject: [PATCH 31/65] [#220] Updating project dependencies --- app/build.gradle.kts | 2 +- .../AndroidApplicationConventionPlugin.kt | 1 + .../AndroidLibraryComposeConventionPlugin.kt | 1 + .../src/main/kotlin/ir/composenews/Compose.kt | 8 +------- .../kotlin/ir/composenews/KotlinAndroid.kt | 4 +--- .../ir/composenews/ProjectExtensions.kt | 2 +- build.gradle.kts | 1 + data/market-local/build.gradle.kts | 7 +++---- .../di/LocalDatasourceModule.kt | 7 ++++--- gradle/libs.versions.toml | 19 +++++++++---------- gradle/wrapper/gradle-wrapper.properties | 2 +- 11 files changed, 24 insertions(+), 30 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 651fd957..e21248c7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -54,4 +54,4 @@ dependencies { implementation(libs.compose.ui.test.manifest) implementation(libs.compose.ui.test.junit4) } -} +} \ No newline at end of file diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt index 3c1b6690..66fea9e5 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -20,6 +20,7 @@ class AndroidApplicationConventionPlugin : Plugin { pluginManager.apply { apply("com.android.application") apply("org.jetbrains.kotlin.android") + apply("org.jetbrains.kotlin.plugin.compose") } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt index ba922c2a..08f9c97e 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt @@ -16,6 +16,7 @@ class AndroidLibraryComposeConventionPlugin : Plugin { private fun Project.applyPlugins() { pluginManager.apply { apply("com.android.library") + apply("org.jetbrains.kotlin.plugin.compose") } } diff --git a/build-logic/convention/src/main/kotlin/ir/composenews/Compose.kt b/build-logic/convention/src/main/kotlin/ir/composenews/Compose.kt index 2ac27b9c..9c575f77 100644 --- a/build-logic/convention/src/main/kotlin/ir/composenews/Compose.kt +++ b/build-logic/convention/src/main/kotlin/ir/composenews/Compose.kt @@ -8,16 +8,12 @@ import org.gradle.kotlin.dsl.dependencies * Configure Compose-specific options */ internal fun Project.configureAndroidCompose( - commonExtension: CommonExtension<*, *, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *,*>, ) { commonExtension.apply { buildFeatures { compose = true } - composeOptions { - kotlinCompilerExtensionVersion = libs.findVersion("composeCompiler").get().toString() - } - testOptions { unitTests { isIncludeAndroidResources = true @@ -27,9 +23,7 @@ internal fun Project.configureAndroidCompose( dependencies { val bom = libs.findLibrary("compose-bom").get() - val composeCompiler = libs.findLibrary("compose-compiler").get() "implementation"(platform(bom)) - "implementation"(composeCompiler) "androidTestImplementation"(platform(bom)) } diff --git a/build-logic/convention/src/main/kotlin/ir/composenews/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/ir/composenews/KotlinAndroid.kt index 4e09eed8..8009cd8f 100644 --- a/build-logic/convention/src/main/kotlin/ir/composenews/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/ir/composenews/KotlinAndroid.kt @@ -3,15 +3,13 @@ package ir.composenews import com.android.build.api.dsl.CommonExtension import org.gradle.api.JavaVersion import org.gradle.api.Project -import org.gradle.api.plugins.ExtensionAware import org.gradle.kotlin.dsl.provideDelegate -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions /** * Configure base Kotlin with Android options */ internal fun Project.configureKotlinAndroid( - commonExtension: CommonExtension<*, *, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *,*>, ) { commonExtension.apply { compileSdk = Integer.parseInt(libs.findVersion("projectCompileSdkVersion").get().toString()) diff --git a/build-logic/convention/src/main/kotlin/ir/composenews/ProjectExtensions.kt b/build-logic/convention/src/main/kotlin/ir/composenews/ProjectExtensions.kt index 60081ae2..431c9fe4 100644 --- a/build-logic/convention/src/main/kotlin/ir/composenews/ProjectExtensions.kt +++ b/build-logic/convention/src/main/kotlin/ir/composenews/ProjectExtensions.kt @@ -30,6 +30,6 @@ inline fun Project.applicationGradle(crossinline configure: ApplicationExtension configure() } -fun CommonExtension<*, *, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { +fun CommonExtension<*, *, *, *, *,*>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { (this as ExtensionAware).extensions.configure("kotlinOptions", block) } \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 0e3356ff..c6f40da8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(kotliner) apply false alias(detekt) apply false alias(ksp) apply false + alias(compose) apply false } } diff --git a/data/market-local/build.gradle.kts b/data/market-local/build.gradle.kts index 307ea291..f9b60b16 100644 --- a/data/market-local/build.gradle.kts +++ b/data/market-local/build.gradle.kts @@ -1,9 +1,7 @@ plugins { - id("composenews.android.library") + alias(libs.plugins.composenews.android.library) id("composenews.android.hilt") - libs.plugins.apply { - alias(sqldelight) - } + alias(libs.plugins.sqldelight) } android { @@ -21,6 +19,7 @@ sqldelight { } } + dependencies { libs.apply { implementation(sqldelight.android) diff --git a/data/market-local/src/main/java/ir/composenews/localdatasource/di/LocalDatasourceModule.kt b/data/market-local/src/main/java/ir/composenews/localdatasource/di/LocalDatasourceModule.kt index 9f75fa9a..259bbbca 100644 --- a/data/market-local/src/main/java/ir/composenews/localdatasource/di/LocalDatasourceModule.kt +++ b/data/market-local/src/main/java/ir/composenews/localdatasource/di/LocalDatasourceModule.kt @@ -1,11 +1,12 @@ package ir.composenews.localdatasource.di -import android.app.Application +import android.content.Context import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.driver.android.AndroidSqliteDriver import dagger.Module import dagger.Provides import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import ir.composenews.db.MarketDatabase import ir.composenews.localdatasource.database.MarketDao @@ -18,8 +19,8 @@ object LocalDatasourceModule { @Singleton @Provides - fun provideMarketsDatabase(app: Application): MarketDatabase { - val driver: SqlDriver = AndroidSqliteDriver(MarketDatabase.Schema, app, "MarketDatabase") + fun provideMarketsDatabase(@ApplicationContext context: Context): MarketDatabase { + val driver: SqlDriver = AndroidSqliteDriver(MarketDatabase.Schema, context, "MarketDatabase") return MarketDatabase(driver) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bec3069a..2b09ba0e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,22 +6,21 @@ projectTargetSdkVersion = "34" projectCompileSdkVersion = "34" projectVersionCode = "1" -kotlin = "1.9.23" +kotlin = "2.0.20" kotlinter = "3.16.0" -ksp = "1.9.10-1.0.13" +ksp = "2.0.20-1.0.25" kotlinxImmutableCollection = "0.3.5" -androidGradlePlugin = "8.1.4" +androidGradlePlugin = "8.6.0" ktx = "1.12.0" composeBOM = "2024.03.00" composeActivity = "1.8.2" composeCoil = "2.2.2" -composeCompiler = "1.5.11" composeMaterial3 = "1.2.1" detekt = "1.23.1" -hilt = "2.50" +hilt = "2.52" androidHiltCompiler = "1.2.0" hiltNavigationCompose = "1.2.0" hiltWork = "1.2.0" @@ -30,9 +29,9 @@ lottieAnimation = "6.1.0" coroutinesCore = "1.7.3" -lifeCycle = "2.7.0" -lifeCycleViewModelKtx = "2.7.0" -lifeCycleRuntimeCompose = "2.7.0" +lifeCycle = "2.8.5" +lifeCycleViewModelKtx = "2.8.5" +lifeCycleRuntimeCompose = "2.8.5" navigationCompose = "2.7.7" @@ -42,7 +41,7 @@ chucker = "3.5.2" kotlinx-serialization = "1.6.0" kotlinx-serialization-converter = "1.0.0" -sqldelight = "2.0.1" +sqldelight = "2.0.2" junit = "4.13.2" junitExt = "1.1.5" @@ -67,7 +66,6 @@ espressoCore = "3.5.1" androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "ktx" } compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBOM" } -compose-compiler = { group = "androidx.compose.compiler", name = "compiler", version.ref = "composeCompiler" } compose-ui = { group = "androidx.compose.ui", name = "ui" } compose-ui-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } @@ -153,6 +151,7 @@ detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } kotliner = { id = "org.jmailen.kotlinter", version.ref = "kotlinter" } sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } composenews-android-library = { id = "composenews.android.library", version = "unspecified" } +compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } [bundles] compose = [ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 81ed94ed..4c968e75 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Sat Dec 10 12:00:36 IRST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From c8243bb337eeaef139403457226518ac61774277 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Wed, 11 Sep 2024 10:04:03 +0330 Subject: [PATCH 32/65] [refactor] revert `ksp` to `kapt` --- .../convention/src/main/kotlin/HiltConventionPlugin.kt | 6 ++++-- build.gradle.kts | 2 +- gradle/libs.versions.toml | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt index f5ecd128..7463814e 100644 --- a/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt @@ -14,14 +14,16 @@ class HiltConventionPlugin : Plugin { private fun Project.applyPlugins() { pluginManager.apply { apply("dagger.hilt.android.plugin") - apply("com.google.devtools.ksp") + apply("org.jetbrains.kotlin.kapt") +// apply("com.google.devtools.ksp") } } private fun Project.applyDependencies() { dependencies { "implementation"(libs.findLibrary("hilt.android").get()) - "ksp"(libs.findLibrary("hilt.compiler").get()) +// "ksp"(libs.findLibrary("hilt.compiler").get()) + "kapt"(libs.findLibrary("hilt.compiler").get()) } } } \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index c6f40da8..b7912781 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { alias(hilt.android) apply false alias(kotliner) apply false alias(detekt) apply false - alias(ksp) apply false +// alias(ksp) apply false alias(compose) apply false } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2b09ba0e..b5522060 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,7 +8,7 @@ projectVersionCode = "1" kotlin = "2.0.20" kotlinter = "3.16.0" -ksp = "2.0.20-1.0.25" +#ksp = "2.0.20-1.0.25" kotlinxImmutableCollection = "0.3.5" androidGradlePlugin = "8.6.0" @@ -145,7 +145,7 @@ android-library = { id = "com.android.library", version.ref = "androidGradlePlug kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } -ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } +#ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } kotliner = { id = "org.jmailen.kotlinter", version.ref = "kotlinter" } From 0d45f7dd1cf819f8ee712e02af2746a069fb0d89 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Wed, 11 Sep 2024 12:49:38 +0330 Subject: [PATCH 33/65] [refactor] update dependencies --- gradle/libs.versions.toml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b5522060..41d0be80 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,12 +12,12 @@ kotlinter = "3.16.0" kotlinxImmutableCollection = "0.3.5" androidGradlePlugin = "8.6.0" -ktx = "1.12.0" +ktx = "1.13.1" -composeBOM = "2024.03.00" -composeActivity = "1.8.2" +composeBOM = "2024.09.00" +composeActivity = "1.9.2" composeCoil = "2.2.2" -composeMaterial3 = "1.2.1" +composeMaterial3 = "1.3.0" detekt = "1.23.1" hilt = "2.52" @@ -27,40 +27,40 @@ hiltWork = "1.2.0" javaxInject = "1" lottieAnimation = "6.1.0" -coroutinesCore = "1.7.3" +coroutinesCore = "1.8.0" lifeCycle = "2.8.5" lifeCycleViewModelKtx = "2.8.5" lifeCycleRuntimeCompose = "2.8.5" -navigationCompose = "2.7.7" +navigationCompose = "2.8.0" retrofit = "2.9.0" loggingInterceptor = "4.11.0" chucker = "3.5.2" -kotlinx-serialization = "1.6.0" +kotlinx-serialization = "1.6.3" kotlinx-serialization-converter = "1.0.0" sqldelight = "2.0.2" junit = "4.13.2" -junitExt = "1.1.5" -coroutinesTest = "1.7.3" +junitExt = "1.2.1" +coroutinesTest = "1.8.0" mockitoKotlin = "4.1.0" mockk = "1.13.5" -runner = "1.5.2" +runner = "1.6.2" startupRuntime = "1.1.1" -workRuntimeKtx = "2.9.0" +workRuntimeKtx = "2.9.1" -windowsSizeClass = "1.2.1" +windowsSizeClass = "1.3.0" adaptive = "0.26.2-beta" ktor = "2.3.5" kotest = "5.7.2" -espressoCore = "3.5.1" +espressoCore = "3.6.1" [libraries] androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "ktx" } From a07660918616a514693c16cff441f530b43c3ccb Mon Sep 17 00:00:00 2001 From: "r.zarchi" Date: Sat, 14 Sep 2024 13:24:22 +0330 Subject: [PATCH 34/65] Just a simple E2E test for the real MainActivity of watch app --- .../ir/composenews/ui/MainActivityTest.kt | 31 +++++++++++++++++++ .../app_watch/ui/details/MarketWearDetails.kt | 8 ++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 app-watch/app/src/androidTest/java/ir/composenews/ui/MainActivityTest.kt diff --git a/app-watch/app/src/androidTest/java/ir/composenews/ui/MainActivityTest.kt b/app-watch/app/src/androidTest/java/ir/composenews/ui/MainActivityTest.kt new file mode 100644 index 00000000..0132acbd --- /dev/null +++ b/app-watch/app/src/androidTest/java/ir/composenews/ui/MainActivityTest.kt @@ -0,0 +1,31 @@ +package ir.composenews.ui + +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onAllNodesWithText +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.onParent +import androidx.compose.ui.test.performClick +import org.junit.Rule +import org.junit.Test + +class MainActivityTest { + + @get:Rule + val composeTestRule = createAndroidComposeRule() + + @Test + fun marketListScreen_DisplayedCorrectly() { + + composeTestRule.waitUntil(timeoutMillis = 5_000) { + composeTestRule.onAllNodesWithText("BNB").fetchSemanticsNodes().isNotEmpty() || + composeTestRule.onAllNodesWithText("BTC").fetchSemanticsNodes().isNotEmpty() + } + + composeTestRule.onNodeWithText("BNB").assertExists() + composeTestRule.onNodeWithText("Bitcoin").assertExists().onParent().performClick() + composeTestRule.onNodeWithContentDescription("Loading. PLease wait").assertExists() + + + } +} \ No newline at end of file diff --git a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt b/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt index fef85167..425c37cd 100644 --- a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt +++ b/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt @@ -16,6 +16,8 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -166,7 +168,11 @@ fun MarketDetailLoadingView() { Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterVertically), - modifier = Modifier.fillMaxSize() + modifier = Modifier + .fillMaxSize() + .semantics( + mergeDescendants = true, + properties = { contentDescription = "Loading. PLease wait" }) ) { Box( modifier = Modifier From 7e87a3adeeb6c11e252741ddb6bb40e7a465d78b Mon Sep 17 00:00:00 2001 From: Vahid Garousi Date: Mon, 16 Sep 2024 09:36:53 +0330 Subject: [PATCH 35/65] [refactor] update dependencies for #220 --- gradle/libs.versions.toml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 41d0be80..515787b3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,25 +9,25 @@ projectVersionCode = "1" kotlin = "2.0.20" kotlinter = "3.16.0" #ksp = "2.0.20-1.0.25" -kotlinxImmutableCollection = "0.3.5" +kotlinxImmutableCollection = "0.3.8" androidGradlePlugin = "8.6.0" ktx = "1.13.1" composeBOM = "2024.09.00" composeActivity = "1.9.2" -composeCoil = "2.2.2" +composeCoil = "2.6.0" composeMaterial3 = "1.3.0" -detekt = "1.23.1" +detekt = "1.23.2" hilt = "2.52" androidHiltCompiler = "1.2.0" hiltNavigationCompose = "1.2.0" hiltWork = "1.2.0" javaxInject = "1" -lottieAnimation = "6.1.0" +lottieAnimation = "6.3.0" -coroutinesCore = "1.8.0" +coroutinesCore = "1.9.0" lifeCycle = "2.8.5" lifeCycleViewModelKtx = "2.8.5" @@ -35,17 +35,17 @@ lifeCycleRuntimeCompose = "2.8.5" navigationCompose = "2.8.0" -retrofit = "2.9.0" -loggingInterceptor = "4.11.0" -chucker = "3.5.2" -kotlinx-serialization = "1.6.3" +retrofit = "2.11.0" +loggingInterceptor = "4.12.0" +chucker = "4.0.0" +kotlinx-serialization = "1.7.2" kotlinx-serialization-converter = "1.0.0" sqldelight = "2.0.2" junit = "4.13.2" junitExt = "1.2.1" -coroutinesTest = "1.8.0" +coroutinesTest = "1.9.0" mockitoKotlin = "4.1.0" mockk = "1.13.5" runner = "1.6.2" @@ -57,7 +57,7 @@ workRuntimeKtx = "2.9.1" windowsSizeClass = "1.3.0" adaptive = "0.26.2-beta" -ktor = "2.3.5" +ktor = "2.3.12" kotest = "5.7.2" espressoCore = "3.6.1" From 54ad4b02feb647221d20e8f2d67cf43604cf0654 Mon Sep 17 00:00:00 2001 From: Vahid Garousi Date: Mon, 16 Sep 2024 09:37:23 +0330 Subject: [PATCH 36/65] [#220] Refactor MarketItem due to SwipeToDismiss breaking changes on material 3 --- .../designsystem/component/MarketItem.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt b/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt index 85441c0b..561feff8 100644 --- a/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt +++ b/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt @@ -24,11 +24,10 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface -import androidx.compose.material3.SwipeToDismiss +import androidx.compose.material3.SwipeToDismissBox import androidx.compose.material3.SwipeToDismissBoxValue import androidx.compose.material3.Text import androidx.compose.material3.rememberSwipeToDismissBoxState @@ -56,7 +55,6 @@ import ir.composenews.designsystem.theme.lightUptrendGreen import kotlinx.coroutines.delay import java.util.Locale -@OptIn(ExperimentalMaterial3Api::class) @Composable fun MarketItem( modifier: Modifier, @@ -84,20 +82,22 @@ fun MarketItem( } }, positionalThreshold = { positionalThreshold }, + initialValue = SwipeToDismissBoxValue.EndToStart ) if (showFavoriteList) { AnimatedVisibility(visible = show, exit = fadeOut(spring())) { - SwipeToDismiss( + SwipeToDismissBox( state = dismissState, - directions = setOf(SwipeToDismissBoxValue.EndToStart), - background = { + enableDismissFromStartToEnd = true, + enableDismissFromEndToStart = false, + backgroundContent = { DismissBackgroundSwipe( modifier = Modifier, dismissState = dismissState, ) }, - dismissContent = { + content = { MarketItemCard( modifier = modifier, name = name, @@ -194,6 +194,7 @@ private fun MarketItemCard( priceChangePercentage24h.contains("-") -> { if (isSystemInDarkTheme()) darkDownTrendRed else lightDownTrendRed } + else -> { if (isSystemInDarkTheme()) darkUptrendGreen else lightUptrendGreen } From b2a9e9196d53c54a8f1b3e5d00bf87138487efda Mon Sep 17 00:00:00 2001 From: Vahid Garousi Date: Mon, 16 Sep 2024 10:05:49 +0330 Subject: [PATCH 37/65] [#220] Update upload-artifact version --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 39b056fc..32debaaf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,7 +45,7 @@ jobs: - run: echo "Uploading build artifacts" - name: Upload a Build Artifact (APK) - uses: actions/upload-artifact@v2.2.4 + uses: actions/upload-artifact@v4 with: name: app path: app/build/outputs/apk/debug/app-debug.apk \ No newline at end of file From 1b149f437dd250a824e1ac69f149cfce326ab3a4 Mon Sep 17 00:00:00 2001 From: Vahid Garousi Date: Mon, 16 Sep 2024 10:15:59 +0330 Subject: [PATCH 38/65] [#220] Fix detekt issue --- .../src/main/java/ir/composenews/network/ApiResponseExtension.kt | 1 + .../ktor/src/main/java/ir/composenews/network/StatusCode.kt | 1 + 2 files changed, 2 insertions(+) diff --git a/core/network/ktor/src/main/java/ir/composenews/network/ApiResponseExtension.kt b/core/network/ktor/src/main/java/ir/composenews/network/ApiResponseExtension.kt index 008a5489..cbe61ce2 100644 --- a/core/network/ktor/src/main/java/ir/composenews/network/ApiResponseExtension.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/ApiResponseExtension.kt @@ -1,3 +1,4 @@ +@file:Suppress("TooGenericExceptionCaught", "ThrowingExceptionsWithoutMessageOrCause") package ir.composenews.network diff --git a/core/network/ktor/src/main/java/ir/composenews/network/StatusCode.kt b/core/network/ktor/src/main/java/ir/composenews/network/StatusCode.kt index fcadf693..8cfe2e5d 100644 --- a/core/network/ktor/src/main/java/ir/composenews/network/StatusCode.kt +++ b/core/network/ktor/src/main/java/ir/composenews/network/StatusCode.kt @@ -1,3 +1,4 @@ +@file:Suppress("MagicNumber") package ir.composenews.network From 085f3dfa5fa5791b837ee836cf46f13d0962835d Mon Sep 17 00:00:00 2001 From: "r.zarchi" Date: Mon, 16 Sep 2024 14:05:41 +0330 Subject: [PATCH 39/65] set some dimen values dynamically in QuadLineChart for better looking in the watch version --- .../designsystem/src/main/res/values/dimens.xml | 8 ++++++++ .../designsystem/component/QuadLineChart.kt | 13 ++++++++----- library/designsystem/src/main/res/values/dimens.xml | 7 +++++++ 3 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 app-watch/designsystem/src/main/res/values/dimens.xml create mode 100644 library/designsystem/src/main/res/values/dimens.xml diff --git a/app-watch/designsystem/src/main/res/values/dimens.xml b/app-watch/designsystem/src/main/res/values/dimens.xml new file mode 100644 index 00000000..179a2acd --- /dev/null +++ b/app-watch/designsystem/src/main/res/values/dimens.xml @@ -0,0 +1,8 @@ + + + 150dp" + 300dp + 8dp + 15dp + 1dp + \ No newline at end of file diff --git a/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt b/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt index 784e217b..184eabdb 100644 --- a/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt +++ b/library/designsystem/src/main/java/ir/composenews/designsystem/component/QuadLineChart.kt @@ -27,8 +27,10 @@ import androidx.compose.ui.graphics.drawscope.clipRect import androidx.compose.ui.graphics.nativeCanvas import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import ir.composenews.designsystem.R import ir.composenews.designsystem.preview.ThemePreviews import ir.composenews.designsystem.theme.ComposeNewsTheme import ir.composenews.designsystem.theme.graphColor @@ -40,7 +42,7 @@ import kotlin.math.roundToInt fun QuadLineChart( data: List>, ) { - val spacing = 100f + val spacing = dimensionResource(R.dimen.quad_line_chart_spacing).value // Reduced spacing to minimize horizontal padding val columnTextColor = MaterialTheme.colorScheme.onSurface.toArgb() val upperValue = remember(key1 = data) { (data.maxOfOrNull { it.second }?.plus(1))?.roundToInt() ?: 0 @@ -67,13 +69,14 @@ fun QuadLineChart( Box( modifier = Modifier .fillMaxWidth() - .height(400.dp) - .padding(20.dp), + .height(dimensionResource(R.dimen.quad_line_chart_height)) + .padding(dimensionResource(R.dimen.quad_line_chart_padding)), ) { + val textXDimen = dimensionResource(R.dimen.quad_line_chart_text_x_size).value Canvas( modifier = Modifier .fillMaxWidth() - .height(400.dp), + .height(dimensionResource(R.dimen.quad_line_chart_height)), ) { val spacePerHour = (size.width - spacing) / data.size val priceStep = (upperValue - lowerValue) / 5f @@ -82,7 +85,7 @@ fun QuadLineChart( drawContext.canvas.nativeCanvas.apply { drawText( round(lowerValue + priceStep * i).toString(), - 30f, + textXDimen, size.height - spacing - i * size.height / 5f, textPaint, ) diff --git a/library/designsystem/src/main/res/values/dimens.xml b/library/designsystem/src/main/res/values/dimens.xml new file mode 100644 index 00000000..39d1e53e --- /dev/null +++ b/library/designsystem/src/main/res/values/dimens.xml @@ -0,0 +1,7 @@ + + + 400dp + 20dp + 30dp + 100dp + \ No newline at end of file From 353fa170fdaaf9f9aa211dd0f6042daf810dbcc3 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Tue, 17 Sep 2024 16:22:22 +0330 Subject: [PATCH 40/65] [debug] build issue #224 --- build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index b7912781..3586ee01 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,6 +12,8 @@ plugins { } } +gradle.startParameter.excludedTaskNames.addAll(listOf(":build-logic:convention:testClasses")) + // Run it with: gradle assembleRelease -PcomposeCompilerReports=true subprojects { tasks.withType().configureEach { From c1510d6da935ad7ea9d35759be6ad5d78f08b6ec Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Tue, 17 Sep 2024 16:52:42 +0330 Subject: [PATCH 41/65] [refactor] update dependencies --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 515787b3..cb6bffee 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,9 +14,9 @@ androidGradlePlugin = "8.6.0" ktx = "1.13.1" -composeBOM = "2024.09.00" +composeBOM = "2024.09.01" composeActivity = "1.9.2" -composeCoil = "2.6.0" +composeCoil = "2.7.0" composeMaterial3 = "1.3.0" detekt = "1.23.2" From d0a27737c1c558504e964075b958277cbd930aef Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Tue, 17 Sep 2024 16:53:14 +0330 Subject: [PATCH 42/65] [debug] set configuration-cache to false for stability #224 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ab7a7f1b..469ebabc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,6 +23,6 @@ kotlin.code.style=official android.nonTransitiveRClass=true org.gradle.parallel=true org.gradle.daemon=true -org.gradle.unsafe.configuration-cache=true +org.gradle.unsafe.configuration-cache=false android.defaults.buildfeatures.buildconfig=true android.nonFinalResIds=false \ No newline at end of file From 53e6347adf0d0bbf07e01fde1027019f237b3b01 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Tue, 17 Sep 2024 17:15:45 +0330 Subject: [PATCH 43/65] [debug] lint issue --- .../java/ir/composenews/designsystem/component/MarketItem.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt b/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt index 561feff8..4a257346 100644 --- a/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt +++ b/library/designsystem/src/main/java/ir/composenews/designsystem/component/MarketItem.kt @@ -82,7 +82,7 @@ fun MarketItem( } }, positionalThreshold = { positionalThreshold }, - initialValue = SwipeToDismissBoxValue.EndToStart + initialValue = SwipeToDismissBoxValue.EndToStart, ) if (showFavoriteList) { From d3ad83791a71d4471860d739c6dadf8890564f64 Mon Sep 17 00:00:00 2001 From: "r.zarchi" Date: Thu, 19 Sep 2024 11:14:29 +0330 Subject: [PATCH 44/65] Updated Readme for the WearOS version --- README.md | 7 +++++++ asset/wearos.jpg | Bin 0 -> 252456 bytes 2 files changed, 7 insertions(+) create mode 100644 asset/wearos.jpg diff --git a/README.md b/README.md index 19243358..99c62e58 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,9 @@ Check the apk [from here](asset/app_v1.0.0.apk) The main architecture of code based on MVI + CLEAN architecture. The division criteria is a hybrid strategy based on Feature + Layer by module. For the detail of architecture, please read [this article](https://medium.com/@kaaveh/migrate-from-mvvm-to-mvi-f938c27c214f). +## Wear OS +This project includes a WearOS module designed for Android-based smartwatches like the Galaxy Watch. The `app-watch` module contains `app`, `designsystem`, `navigation`, and `ui` submodules. You can build the `app-watch:app` to have wearOS version of the application. + ## 🚦 Navigation For the detail of navigation implementations, please read [this article](https://proandroiddev.com/all-about-navigation-in-the-jetpack-compose-based-production-code-base-902706b8466d). @@ -34,6 +37,7 @@ For the detail of handling preview of composable functions in this code-base, pl - Work manager - Unit test - Support large screens +- Support WearOS devices - Monochromatic app icon - Version catalog & Convention Plugin (For the detail, please read [this article](https://proandroiddev.com/mastering-android-dependency-management-b94205595f6b)) - CI @@ -67,6 +71,9 @@ For the detail of handling preview of composable functions in this code-base, pl ![](asset/large_screen.jpg) +### WearOS devises (Android based smart watches) +![Wear OS screenshots](asset/wearos.jpg) + ## Additional Resources - [Git Hooks](documentation/GitHooks.md) - Learn about Git hooks used in this project for code formatting and analysis. diff --git a/asset/wearos.jpg b/asset/wearos.jpg new file mode 100644 index 0000000000000000000000000000000000000000..171edd19673442ccd4c085846bcfaf61a4a245b0 GIT binary patch literal 252456 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,Bv=W#&<`Mj)t>ozIT_X})VK>5xZZ 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�d*PFw5Y`;eC`A-C}J^9R-5)n@J?p~W> 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 Date: Thu, 19 Sep 2024 12:08:29 +0330 Subject: [PATCH 45/65] Removed some unused dependencies from app-watch modules --- app-watch/app/build.gradle.kts | 2 +- app-watch/navigation/build.gradle.kts | 2 +- app-watch/ui/build.gradle.kts | 4 ---- .../main/java/ir/composenews/app_watch/ui/list/MarketItem.kt | 3 +-- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/app-watch/app/build.gradle.kts b/app-watch/app/build.gradle.kts index 12b0473e..27c3450c 100644 --- a/app-watch/app/build.gradle.kts +++ b/app-watch/app/build.gradle.kts @@ -42,7 +42,6 @@ dependencies { } projects.core.apply { - implementation(sync) implementation(base) implementation(uimarket) } @@ -56,6 +55,7 @@ dependencies { implementation(libs.compose.ui.preview.wear) implementation(libs.compose.foundation.wear) implementation(libs.compose.horologist.layout) + implementation(work.runtime.ktx) androidTestImplementation(platform(libs.compose.bom)) androidTestImplementation(libs.compose.ui.test.junit4) debugImplementation(libs.compose.ui.tooling) diff --git a/app-watch/navigation/build.gradle.kts b/app-watch/navigation/build.gradle.kts index 0c9523fe..44202f01 100644 --- a/app-watch/navigation/build.gradle.kts +++ b/app-watch/navigation/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { projects.apply { implementation(appWatch.ui) implementation(core.uimarket) - implementation(domain.market) + } implementation(libs.navigation.compose.wear) diff --git a/app-watch/ui/build.gradle.kts b/app-watch/ui/build.gradle.kts index 12a209f8..84f627d3 100644 --- a/app-watch/ui/build.gradle.kts +++ b/app-watch/ui/build.gradle.kts @@ -14,10 +14,6 @@ configurations.all { dependencies { - projects.appWatch.apply { - implementation(designsystem) - } - projects.feature.apply { implementation(marketlist) implementation(marketdetail) diff --git a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt b/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt index 4a9654fa..cfad1913 100644 --- a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt +++ b/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt @@ -33,7 +33,6 @@ import com.google.android.horologist.annotations.ExperimentalHorologistApi import com.google.android.horologist.compose.layout.ScalingLazyColumn import com.google.android.horologist.compose.layout.ScalingLazyColumnDefaults import com.google.android.horologist.compose.layout.rememberResponsiveColumnState -import ir.composenews.app_watch.designsystem.theme.ComposeNewsWearTheme import ir.composenews.designsystem.R import ir.composenews.designsystem.component.shimmerEffect import ir.composenews.designsystem.theme.darkDownTrendRed @@ -155,7 +154,7 @@ private fun ArrowIconUpOrDown(priceChangePercentage24h: String, tint: Color) { @Preview(device = WearDevices.LARGE_ROUND, showSystemUi = true) @Composable private fun MarketItemPrev() { - ComposeNewsWearTheme { + MaterialTheme { MarketItem( modifier = Modifier, name = "Polkad", From 94a97fcde3b5b4ae1c4a065cbafd6a39aa1c5b8d Mon Sep 17 00:00:00 2001 From: Vahid Garousi Date: Fri, 20 Sep 2024 10:20:14 +0330 Subject: [PATCH 46/65] Merging `kmp` to `1191-feature-add-konsist-as-code-analyzer` --- gradle/libs.versions.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cb6bffee..22bb74e8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -58,6 +58,7 @@ windowsSizeClass = "1.3.0" adaptive = "0.26.2-beta" ktor = "2.3.12" +konsist = "0.16.0" kotest = "5.7.2" espressoCore = "3.6.1" @@ -97,6 +98,7 @@ ktor-client-okhttp = { group = "io.ktor", name = "ktor-client-okhttp", version.r ktor-json = { group = "io.ktor", name = "ktor-serialization-kotlinx-json", version.ref = "ktor" } ktor-contentNegotiation = { group = "io.ktor", name = "ktor-client-content-negotiation", version.ref = "ktor" } ktor-logging = { group = "io.ktor", name = "ktor-client-logging", version.ref = "ktor" } +konsist = { module = "com.lemonappdev:konsist", version.ref = "konsist" } retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" } kotlinx-serialization-converter = { group = "com.jakewharton.retrofit", name = "retrofit2-kotlinx-serialization-converter", version.ref = "kotlinx-serialization-converter" } From feb2226837bf2c0cf5147a340cb9cbbaedc100e6 Mon Sep 17 00:00:00 2001 From: Vahid Garousi Date: Fri, 20 Sep 2024 10:25:59 +0330 Subject: [PATCH 47/65] Updating konsist version to `0.16.1` for #191 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 22bb74e8..1c9ec6e6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -58,7 +58,7 @@ windowsSizeClass = "1.3.0" adaptive = "0.26.2-beta" ktor = "2.3.12" -konsist = "0.16.0" +konsist = "0.16.1" kotest = "5.7.2" espressoCore = "3.6.1" From d570a9f95c9d961e831a3d39294f270f39d483cf Mon Sep 17 00:00:00 2001 From: Vahid Garousi Date: Fri, 20 Sep 2024 10:43:27 +0330 Subject: [PATCH 48/65] Updating AGP version to `8.6.1` for #191 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1c9ec6e6..53da6c0a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ kotlin = "2.0.20" kotlinter = "3.16.0" #ksp = "2.0.20-1.0.25" kotlinxImmutableCollection = "0.3.8" -androidGradlePlugin = "8.6.0" +androidGradlePlugin = "8.6.1" ktx = "1.13.1" From f99cf54184ee37efd5b6fb505de4ee1447aff9ca Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Fri, 20 Sep 2024 15:43:57 +0330 Subject: [PATCH 49/65] [debug] KonsistUseCaseTest lint issue --- .../test/java/ir/composenews/konsist/KonsistUseCaseTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/konsist/src/test/java/ir/composenews/konsist/KonsistUseCaseTest.kt b/konsist/src/test/java/ir/composenews/konsist/KonsistUseCaseTest.kt index 5b7466c2..dfc96b1a 100644 --- a/konsist/src/test/java/ir/composenews/konsist/KonsistUseCaseTest.kt +++ b/konsist/src/test/java/ir/composenews/konsist/KonsistUseCaseTest.kt @@ -8,7 +8,7 @@ class KonsistUseCaseTest : AnnotationSpec() { private val domainModuleUseCasesScope = Konsist .scopeFromProject( moduleName = "domain/market", - sourceSetName = "main" + sourceSetName = "main", ) .classes() .filter { it.resideInPackage("..use_case..") } @@ -48,4 +48,4 @@ class KonsistUseCaseTest : AnnotationSpec() { it.hasPublicOrDefaultModifier } } -} \ No newline at end of file +} From 57b991e90bbefa24ed69d965d92c1049de17cada Mon Sep 17 00:00:00 2001 From: "r.zarchi" Date: Sun, 22 Sep 2024 12:31:55 +0330 Subject: [PATCH 50/65] override some wearOS libraries minSDK to fix the test task errors --- app-watch/designsystem/src/main/AndroidManifest.xml | 6 +++++- app-watch/navigation/src/main/AndroidManifest.xml | 6 +++++- app-watch/ui/src/main/AndroidManifest.xml | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app-watch/designsystem/src/main/AndroidManifest.xml b/app-watch/designsystem/src/main/AndroidManifest.xml index 568741e5..d4db7f4e 100644 --- a/app-watch/designsystem/src/main/AndroidManifest.xml +++ b/app-watch/designsystem/src/main/AndroidManifest.xml @@ -1,2 +1,6 @@ - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/app-watch/navigation/src/main/AndroidManifest.xml b/app-watch/navigation/src/main/AndroidManifest.xml index 568741e5..ca2a3ff0 100644 --- a/app-watch/navigation/src/main/AndroidManifest.xml +++ b/app-watch/navigation/src/main/AndroidManifest.xml @@ -1,2 +1,6 @@ - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/app-watch/ui/src/main/AndroidManifest.xml b/app-watch/ui/src/main/AndroidManifest.xml index 568741e5..0f631b2f 100644 --- a/app-watch/ui/src/main/AndroidManifest.xml +++ b/app-watch/ui/src/main/AndroidManifest.xml @@ -1,2 +1,6 @@ - \ No newline at end of file + + + + + \ No newline at end of file From 1d948d6ba4d2c687c1fa5047d2efdb6c15a6814f Mon Sep 17 00:00:00 2001 From: "r.zarchi" Date: Sun, 22 Sep 2024 15:38:41 +0330 Subject: [PATCH 51/65] Some improvements in new appWatch modules for resolving lint errors --- .../main/java/ir/composenews/MainViewModel.kt | 2 +- .../navigation/ComposeNewsWearNavHost.kt | 8 ++++---- .../java/ir/composenews/ui/MainActivity.kt | 6 +++--- .../designsystem/theme/Theme.kt | 4 ++-- .../navigation/graph/Destinations.kt | 2 +- .../navigation/graph/MainContract.kt | 2 +- .../navigation/graph/NewsDetail.kt | 20 ++++++++++--------- .../navigation/graph/NewsList.kt | 6 +++--- .../ui/details/MarketWearDetails.kt | 13 ++++++------ .../ui/list/MarketItem.kt | 18 ++++++++--------- .../ui/list/MarketListWearScreen.kt | 12 ++++------- 11 files changed, 45 insertions(+), 48 deletions(-) rename app-watch/designsystem/src/main/java/ir/composenews/{app_watch => appwatch}/designsystem/theme/Theme.kt (86%) rename app-watch/navigation/src/main/java/ir/composenews/{app_watch => appwatch}/navigation/graph/Destinations.kt (82%) rename app-watch/navigation/src/main/java/ir/composenews/{app_watch => appwatch}/navigation/graph/MainContract.kt (87%) rename app-watch/navigation/src/main/java/ir/composenews/{app_watch => appwatch}/navigation/graph/NewsDetail.kt (71%) rename app-watch/navigation/src/main/java/ir/composenews/{app_watch => appwatch}/navigation/graph/NewsList.kt (82%) rename app-watch/ui/src/main/java/ir/composenews/{app_watch => appwatch}/ui/details/MarketWearDetails.kt (97%) rename app-watch/ui/src/main/java/ir/composenews/{app_watch => appwatch}/ui/list/MarketItem.kt (94%) rename app-watch/ui/src/main/java/ir/composenews/{app_watch => appwatch}/ui/list/MarketListWearScreen.kt (96%) diff --git a/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt b/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt index 16ca273d..fd50c296 100644 --- a/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt +++ b/app-watch/app/src/main/java/ir/composenews/MainViewModel.kt @@ -2,7 +2,7 @@ package ir.composenews import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import ir.composenews.app_watch.navigation.graph.MainContract +import ir.composenews.appwatch.navigation.graph.MainContract import ir.composenews.base.BaseViewModel import ir.composenews.core_test.dispatcher.DispatcherProvider import ir.composenews.uimarket.model.MarketModel diff --git a/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt b/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt index 2773fd76..7ba931e7 100644 --- a/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt +++ b/app-watch/app/src/main/java/ir/composenews/navigation/ComposeNewsWearNavHost.kt @@ -4,10 +4,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.NavHostController import androidx.wear.compose.navigation.SwipeDismissableNavHost -import ir.composenews.app_watch.navigation.graph.MainContract -import ir.composenews.app_watch.navigation.graph.Destinations -import ir.composenews.app_watch.navigation.graph.wearMarketDetail -import ir.composenews.app_watch.navigation.graph.wearMarketList +import ir.composenews.appwatch.navigation.graph.MainContract +import ir.composenews.appwatch.navigation.graph.Destinations +import ir.composenews.appwatch.navigation.graph.wearMarketDetail +import ir.composenews.appwatch.navigation.graph.wearMarketList import ir.composenews.uimarket.model.MarketModel @Composable diff --git a/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt b/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt index a15b9aac..d909f48c 100644 --- a/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt +++ b/app-watch/app/src/main/java/ir/composenews/ui/MainActivity.kt @@ -15,9 +15,9 @@ import com.google.android.horologist.compose.layout.AppScaffold import com.google.android.horologist.compose.layout.ScreenScaffold import dagger.hilt.android.AndroidEntryPoint import ir.composenews.MainViewModel -import ir.composenews.app_watch.designsystem.theme.ComposeNewsWearTheme -import ir.composenews.app_watch.navigation.graph.Destinations -import ir.composenews.app_watch.navigation.graph.MainContract +import ir.composenews.appwatch.designsystem.theme.ComposeNewsWearTheme +import ir.composenews.appwatch.navigation.graph.Destinations +import ir.composenews.appwatch.navigation.graph.MainContract import ir.composenews.navigation.ComposeNewsWearNavHost @AndroidEntryPoint diff --git a/app-watch/designsystem/src/main/java/ir/composenews/app_watch/designsystem/theme/Theme.kt b/app-watch/designsystem/src/main/java/ir/composenews/appwatch/designsystem/theme/Theme.kt similarity index 86% rename from app-watch/designsystem/src/main/java/ir/composenews/app_watch/designsystem/theme/Theme.kt rename to app-watch/designsystem/src/main/java/ir/composenews/appwatch/designsystem/theme/Theme.kt index 0dc5455f..347e1aa3 100644 --- a/app-watch/designsystem/src/main/java/ir/composenews/app_watch/designsystem/theme/Theme.kt +++ b/app-watch/designsystem/src/main/java/ir/composenews/appwatch/designsystem/theme/Theme.kt @@ -1,4 +1,4 @@ -package ir.composenews.app_watch.designsystem.theme +package ir.composenews.appwatch.designsystem.theme import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable @@ -12,4 +12,4 @@ fun ComposeNewsWearTheme( MaterialTheme( content = content, ) -} \ No newline at end of file +} diff --git a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/Destinations.kt b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/Destinations.kt similarity index 82% rename from app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/Destinations.kt rename to app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/Destinations.kt index 77741578..c8ef707f 100644 --- a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/Destinations.kt +++ b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/Destinations.kt @@ -1,4 +1,4 @@ -package ir.composenews.app_watch.navigation.graph +package ir.composenews.appwatch.navigation.graph sealed class Destinations(val route: String) { data object MarketListScreen : Destinations("market_list_screen") diff --git a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/MainContract.kt b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MainContract.kt similarity index 87% rename from app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/MainContract.kt rename to app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MainContract.kt index 097c123d..82fb6cd1 100644 --- a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/MainContract.kt +++ b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/MainContract.kt @@ -1,4 +1,4 @@ -package ir.composenews.app_watch.navigation.graph +package ir.composenews.appwatch.navigation.graph import ir.composenews.base.UnidirectionalViewModel import ir.composenews.uimarket.model.MarketModel diff --git a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsDetail.kt b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsDetail.kt similarity index 71% rename from app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsDetail.kt rename to app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsDetail.kt index 68ed7030..c8cf2642 100644 --- a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsDetail.kt +++ b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsDetail.kt @@ -1,4 +1,4 @@ -package ir.composenews.app_watch.navigation.graph +package ir.composenews.appwatch.navigation.graph import android.os.Build import android.os.Bundle @@ -6,7 +6,7 @@ import android.os.Parcelable import androidx.navigation.NavBackStackEntry import androidx.navigation.NavGraphBuilder import androidx.wear.compose.navigation.composable -import ir.composenews.app_watch.ui.details.MarketDetailWearRoute +import ir.composenews.appwatch.ui.details.MarketDetailWearRoute import ir.composenews.uimarket.model.MarketModel fun NavGraphBuilder.wearMarketDetail(uiState: MainContract.State) { @@ -25,10 +25,12 @@ private fun NavBackStackEntry.parcelableData(key: String): T? { return arguments?.parcelable(key) as? T } -private inline fun Bundle.parcelable(key: String): T? = when { - Build.VERSION.SDK_INT >= 33 -> getParcelable(key, T::class.java) - else -> - @Suppress("DEPRECATION") - getParcelable(key) - as? T -} +private inline fun Bundle.parcelable(key: String): T? = + when { + Build.VERSION.SDK_INT >= 33 -> + getParcelable(key, T::class.java) + + else -> + @Suppress("DEPRECATION") + getParcelable(key) as? T + } diff --git a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsList.kt b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsList.kt similarity index 82% rename from app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsList.kt rename to app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsList.kt index f1677f15..73a63901 100644 --- a/app-watch/navigation/src/main/java/ir/composenews/app_watch/navigation/graph/NewsList.kt +++ b/app-watch/navigation/src/main/java/ir/composenews/appwatch/navigation/graph/NewsList.kt @@ -1,8 +1,8 @@ -package ir.composenews.app_watch.navigation.graph +package ir.composenews.appwatch.navigation.graph import androidx.navigation.NavGraphBuilder import androidx.wear.compose.navigation.composable -import ir.composenews.app_watch.ui.list.MarketListWearRoute +import ir.composenews.appwatch.ui.list.MarketListWearRoute import ir.composenews.uimarket.model.MarketModel fun NavGraphBuilder.wearMarketList( @@ -17,4 +17,4 @@ fun NavGraphBuilder.wearMarketList( showFavoriteList = showFavorite, ) } -} \ No newline at end of file +} diff --git a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt b/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/details/MarketWearDetails.kt similarity index 97% rename from app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt rename to app-watch/ui/src/main/java/ir/composenews/appwatch/ui/details/MarketWearDetails.kt index 425c37cd..2fc5da25 100644 --- a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/details/MarketWearDetails.kt +++ b/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/details/MarketWearDetails.kt @@ -1,4 +1,4 @@ -package ir.composenews.app_watch.ui.details +package ir.composenews.appwatch.ui.details import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement @@ -78,7 +78,6 @@ fun MarketDetailWearRoute( private fun MarketDetailScreen( marketDetailState: State, ) { - val listState = rememberResponsiveColumnState( contentPadding = ScalingLazyColumnDefaults.padding( first = ScalingLazyColumnDefaults.ItemType.Icon, @@ -132,7 +131,7 @@ fun MarketDetail(marketData: MarketDetail.MarketData?) { Column( modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp), - horizontalAlignment = Alignment.Start + horizontalAlignment = Alignment.Start, ) { data.marketCap?.let { marketCap -> MarketDetailDataBlock("Market Cap", formatNumber(marketCap.usd)) @@ -155,7 +154,7 @@ private fun MarketDetailDataBlock(title: String, value: String) { Text( text = title, style = MaterialTheme.typography.title3, - color = MaterialTheme.colors.secondary + color = MaterialTheme.colors.secondary, ) Text( text = value, @@ -172,7 +171,8 @@ fun MarketDetailLoadingView() { .fillMaxSize() .semantics( mergeDescendants = true, - properties = { contentDescription = "Loading. PLease wait" }) + properties = { contentDescription = "Loading. PLease wait" }, + ), ) { Box( modifier = Modifier @@ -194,7 +194,6 @@ fun MarketDetailLoadingView() { .height(12.dp) .shimmerEffect(), ) - } } @@ -209,4 +208,4 @@ private fun MarketDetailScreenPrev( ComposeNewsTheme { MarketDetailScreen(marketDetailState = marketDetailState) } -} \ No newline at end of file +} diff --git a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt b/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt similarity index 94% rename from app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt rename to app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt index cfad1913..8919508e 100644 --- a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketItem.kt +++ b/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketItem.kt @@ -1,6 +1,6 @@ @file:Suppress("MagicNumber", "MaxLineLength", "LongMethod") -package ir.composenews.app_watch.ui.list +package ir.composenews.appwatch.ui.list import androidx.compose.foundation.Image import androidx.compose.foundation.isSystemInDarkTheme @@ -51,7 +51,6 @@ fun MarketItem( priceChangePercentage24h: String, onItemClick: () -> Unit, ) { - MarketItemCard( modifier = modifier, name = name, @@ -75,7 +74,7 @@ private fun MarketItemCard( ) { Card( modifier = modifier.wrapContentHeight(), - onClick = { onItemClick() } + onClick = { onItemClick() }, ) { Row( modifier = Modifier @@ -93,25 +92,26 @@ private fun MarketItemCard( Column( modifier = Modifier.fillMaxHeight(), horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.SpaceAround + verticalArrangement = Arrangement.SpaceAround, ) { Text( text = symbol.uppercase(Locale.getDefault()), - style = MaterialTheme.typography.caption3 + style = MaterialTheme.typography.caption3, ) Text( text = name, style = MaterialTheme.typography.caption3, - maxLines = 1 + maxLines = 1, ) } Column( modifier = Modifier.fillMaxHeight(), horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.SpaceAround + verticalArrangement = Arrangement.SpaceAround, ) { Text( - text = "$price $", style = MaterialTheme.typography.caption3 + text = "$price $", + style = MaterialTheme.typography.caption3, ) Row(verticalAlignment = Alignment.CenterVertically) { val color = when { @@ -215,7 +215,7 @@ fun ShimmerMarketListItem() { first = ScalingLazyColumnDefaults.ItemType.Card, last = ScalingLazyColumnDefaults.ItemType.Card, ), - ) + ), ) { items(20) { ShimmerMarketItem() diff --git a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketListWearScreen.kt b/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketListWearScreen.kt similarity index 96% rename from app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketListWearScreen.kt rename to app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketListWearScreen.kt index 01314623..92fbc916 100644 --- a/app-watch/ui/src/main/java/ir/composenews/app_watch/ui/list/MarketListWearScreen.kt +++ b/app-watch/ui/src/main/java/ir/composenews/appwatch/ui/list/MarketListWearScreen.kt @@ -1,4 +1,4 @@ -package ir.composenews.app_watch.ui.list +package ir.composenews.appwatch.ui.list import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn @@ -51,10 +51,8 @@ fun MarketListWearRoute( }, ) } - } - @OptIn(ExperimentalHorologistApi::class) @Composable private fun MarketListWearScreen( @@ -63,7 +61,6 @@ private fun MarketListWearScreen( onRefresh: () -> Unit, modifier: Modifier = Modifier, ) { - val refreshState = rememberPullRefreshState(refreshing = marketListState.refreshing, onRefresh = onRefresh) @@ -77,7 +74,7 @@ private fun MarketListWearScreen( Box( modifier = modifier .fillMaxWidth() - .pullRefresh(refreshState) + .pullRefresh(refreshState), ) { AnimatedVisibility( visible = !marketListState.refreshing, @@ -85,7 +82,7 @@ private fun MarketListWearScreen( exit = fadeOut(), ) { ScalingLazyColumn( - columnState = listState + columnState = listState, ) { items( items = marketListState.marketList, @@ -105,5 +102,4 @@ private fun MarketListWearScreen( } } } - -} \ No newline at end of file +} From 80fe340d4e61f5df695631537c3f83fc3e4e8b10 Mon Sep 17 00:00:00 2001 From: "r.zarchi" Date: Sun, 22 Sep 2024 16:37:51 +0330 Subject: [PATCH 52/65] Added missing proguard rules to appWatch module --- app-watch/app/proguard-rules.pro | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app-watch/app/proguard-rules.pro b/app-watch/app/proguard-rules.pro index 481bb434..f1895e46 100644 --- a/app-watch/app/proguard-rules.pro +++ b/app-watch/app/proguard-rules.pro @@ -18,4 +18,5 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile +-dontwarn reactor.blockhound.integration.BlockHoundIntegration \ No newline at end of file From 40498db1660961aee7d2ac857597f36a20e375e8 Mon Sep 17 00:00:00 2001 From: Kaaveh Mohamedi Date: Thu, 26 Sep 2024 08:49:57 +0330 Subject: [PATCH 53/65] [#228] update readme diagram --- README.md | 2 +- asset/arch.jpg | Bin 0 -> 103364 bytes asset/architecture.jpg | Bin 83337 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 asset/arch.jpg delete mode 100644 asset/architecture.jpg diff --git a/README.md b/README.md index 99c62e58..93188953 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Check the apk [from here](asset/app_v1.0.0.apk) ## ⚙️ Architecture -![Architecture diagram](asset/architecture.jpg) +![Architecture diagram](asset/arch.jpg) The main architecture of code based on MVI + CLEAN architecture. The division criteria is a hybrid strategy based on Feature + Layer by module. For the detail of architecture, please read [this article](https://medium.com/@kaaveh/migrate-from-mvvm-to-mvi-f938c27c214f). diff --git a/asset/arch.jpg b/asset/arch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ea6d1a0c6a3b98158010f34ecb59929132c65dd GIT binary patch literal 103364 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 |ZI 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 aeJ$<4;eUsM%m4fEXI1cD3LWJ5HTE|@=Wwq8 literal 0 HcmV?d00001 diff --git a/asset/architecture.jpg b/asset/architecture.jpg deleted file mode 100644 index 8d3f588853fe0fab2e35593bce44157eaa58c0bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83337 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