From bb095b2ea6c05d5836029a90434e21738be93425 Mon Sep 17 00:00:00 2001 From: Sangyoon Date: Fri, 10 Oct 2025 18:57:59 +0900 Subject: [PATCH 1/4] =?UTF-8?q?#8=20[REFAC]=20=EC=95=B1=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EC=BD=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/ic_launcher-playstore.png | Bin 10324 -> 7749 bytes .../drawable-night/ic_launcher_foreground.xml | 4 ++-- .../res/drawable/ic_launcher_foreground.xml | 4 ++-- app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 1150 -> 998 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2328 -> 2148 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 816 -> 722 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1582 -> 1490 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 1306 -> 1184 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 3168 -> 2916 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 1790 -> 1594 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 4858 -> 4504 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 2270 -> 1890 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 6698 -> 6314 bytes 13 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index 4007c413f93981478e5cce26fa3ad1f294056b94..abf6dd4dfd31abded88aa446eef4344e76af06e0 100644 GIT binary patch literal 7749 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 dRnqt?{KvYCnwTs0qMwIB`~E}o_zNi4%-H|{ literal 10324 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 B diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 1c28491..078cfa1 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -11,10 +11,10 @@ android:pathData="M0,0h512v512h-512z" android:fillColor="#ffffff"/> diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp index 7f4c78afc9407e062ff6118e0cda3ff530f3fcc6..1ed8d225f979e7b69b448e8bd323c632201dc05c 100644 GIT binary patch literal 998 zcmVHPfa+IZQFF#_m9=KH7q;nIb(-fZQJrDKZTj0 zwu(0(*;83v-xXr37!)(8q%+U}xDH(tfd9W|2r|S%nmLdmL_z(A{D>J=GHhnp&#;?e zk84S0E~4LnA2T#FJbSPd__sWsV>Qvwlp#R$c=3?#M@TEy8wfE&z>+ z-2Nx~dTQ^@?g!TW7e5RrkUN$^Fh31HpRH{8TKC7g>Ft{d1#;^FFrR>*xT0U%e(7M% zk1rrfXFc<%4N#bo*mg^ZMqs}MKRK9AFah)cD9$AUpwR%77eFKe#nPKrlmaM#Yz37E zAlZr)aFiB`s0(e;kE~I}P>(_|kB6hkntfM}{;@4p04LZ7^L^sr=-|o55B(EsDhU|e z2|vdFK0f0Eq?GS67=W%L)q#kUOlN9f+ja>6s)B9X_E8jgi7ESL;_E5)Z^x1oltf(s z=3Q{(Z2VaF$G+t$qE1zh8$5&NJb3zH;PAnLGxno9QB|rEbfO!Y4dE#@5?>Hk#BQYr zRLuP3qTiMpv~J(0R7%vf~X4$Bwjfda2>rujA1^G<7_4YzTyZ%H%R!yRi~ zQcxgS6m>DmQj?Z^4PVQs1amu5A$pqIXui%Lq@mCkZ)<|#hv)zCLY#{8nHwWv&O|ZY zFWedlcIZJ6Un=i9GxD}|@}(m}uE$R-S8RazLkUZU07Rhoi}y5apMbXekuNaeHCgbc z2vmn#_}o_%DWt)DD$#u4d$46tT`vYH_Fl4}59aq9KJD>UPcIq0VvL9{8zV}IC{ZFx zi6{{fC8Csw5+$OPh!W*1Mo*shxZlw7_K*W9gCOW654vCyOo3_c9UthlRRDnz#7>f4 Us+~03YIARS^Dsvp0rCG-03PMcWdHyG literal 1150 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 aN~)w06PVmwUQ5|Q+gu-?v?pXh#v}l7XA%zp literal 2328 zcmV+z3Fr1wNk&Ex2><|BMM6+kP&iBk2><{uN5Byf^@f7BZ6t?3?Cl;15itSYqltEW zQTa-1+jc{iv!c^Eif!ArZQHiZL)*4(+qTB`%=WITbNtDCu2%S+qP}nwr$(CZQFLk?R)V{{)4)W+s*BB{GQsjIk_G4dy}oUrXB%D z3;+U7&Q>vbvNhSZZQE|&-v0@JcvIG*T%MK%wXj8bD)_+Y+rCvxgmws#RHjzcnR?5}+Wb4uR3TC&3Jp}eY3@oFY zWL%O!O|@4X6%FHVBG+EO3duMmfdAb+92js1PL@TJr3fqG4cjg+NW-<5Gpe zB~Nd?!W{naDX+MRj2Z#;;4YF{X#IMLs&zP(X-m+=%5Mo9iw!wjxQVQz8`@2D9`4nn z97ROcaP95Qn^$BIv6=ul6I+OYs`h+|U0^f$km;sPVZgGh{do3&k>_hg1`$;vLWm^= zL`=^VPH$!+1r#->F7*bVO}WoaWK}d+6Qb6R0udFI0$g&+901!)OiauIu*D>hIY?+G z$~_@0iw&76Le-IZdS#A3A-?HRMBdNwHHbK#YXC(dqB8(FAuH80a8)kY(L%`mz$Md~ z#AYEx!PmBv%d?2J zavv}vOL+UCp;S=(CfIp|P}W)2 z!l?oP6`;y)E@OLJ{GMFwff9x(oGy&Tq>^l0c7(7tfbZ0}iLrg`Hn5jLXu3G0ojjnM#in_vIq~sge~DyS7L2Q8*P}vX;-r`*r#iyri876Y7=snU z9yUrZ28Lkg2t`I$KW%(GMg@QH9-A;(ya z0m8VJ%D;bMX^jNMciYx6?nc8YjK6+u1@qQL1&5-Gc57C( z>Y5iUB@?^ipHVUlVI4pbltv5V<;%GcwXc~10Zk-?*wDM0M8ytZ?qci4%_ezqyM|(M2V!xA@)d#b_|ELL9Dso=`NlBRg4R zBhfij%|Go8akv8*58&UOEvb+POzg&p+R<$y+U1rKgOZpODvFOyolcC`6 zECU*eGKMd5&I}N7n&HR~b(LXve#qs+5E2@xhF#BowVVMk6Lt(^;&H`$U)A!`!U;|D zPyb9jJEhp*dt%;4XwgPAjb`#In|h0M7ZxGbg;ioZPhq(+A&n))E#tG4cKH@!pTmSW zZM32y71Bsjl%i{{CC+o0q;yD4Yew8Q-CUlE#tEY&O!3x6+dr7XJOz3>W11JNyQ<_U z7AB05DCD<{t+uvcGz$mxbtbSR?sJx0+mr>3dPeYW&&K6VGnF^L*8#nqNi2wKk?1o& zRE21)=<#aOSTsBNQ<0dzA9g_h)P$zQkp%60y4c9`qH&XWG-)iJFFLZ_ITGCN$rQvh zHG2h({Thf1#u?A$d<%~1TMGytncqP5|paM zYZ6NnPc{_KzyIcPE89NUv?IhnHGtQ^R~yc8W7zs*7!PSnoQZFP{*qT%wcEuL9$)mA`nL`}L^WvhI`RDUAM;BGjPDE~ ybsEiLXq%qwUikDu;`;Z4pT2Pa&^C=aJ?B6zn{vh#Mi3{H$5ozqv1M~71#t%T$ZOO9 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp index 719851c50a0f63d863c7a79cc5102841b4b5ae29..371dc79fbadc0ec1f4c3a074706dc62d78bfe219 100644 GIT binary patch literal 722 zcmV;@0xkVgNk&G>0ssJ4MM6+kP&iDz0ssInFTe{BRY;<>?Tn{P|BOe`@B-OznRJ)5x}+>e|7j0#M0jaJc}63XrJ)AO`|Ku!(Kk#uVu{ z>y;ZAQ&~@+1GkYBDPG3o`vZ>_RG5mO$;eS5#ciNeq=&#cRi=7W7fA}vt%KrJiaOLi z5U*&GIHXe6L2=Eo4#5siXCTN%g}GZr^F+{m5r3LLB&GS%aeF?m2?ET;s0e>-8ta{) z`4ebT$L(XU6$nrfwhLyl-fU`zb%gAiY_W;P9#jq>l0bZN5YWpS@T z_(?hdRx?7_v=U2z!T`q!(1sXh5`8nZIBEv3KolGBh9V$5BQ*f4HUSWQO0E7_ zt-Bc&WGb^!Y81F!iJK#LVJm^56hX9s&piBWut=C6E_aT7s`;ChakJdYJfD%U;^z~MJ`fvk}$m~g(^XE&@CV_rgY51 z+*})=0EG}$c@DB?tY#TI*~>nz@C3Gp5Ddt?6bE<#L5Ob*r9UBzPVkx+oM$FoLD!3s zm?q)G$drwapkt-wBZL(U!Z4B@U@zpt0n3R7ft!Tz;lNK6{Z9V7-}%cHc1^a~vQc5a zODF6_$BzFg%5SeTjrbW6_J0s0o;wdi(UC|(hPde(B(49OAY94%hPxl$96o>haQMV9 z9@I~7SKL>y1>p#P%n}Ui*mbpUZ;vEvI{-s-ZXKG7fi%dW@#bO*1R^>ka#Ivd@hHIo E0P7z|)&Kwi literal 816 zcmV-01JC?YNk&E}0{{S5MM6+kP&iB*0{{RoFTe{BRY;<(&5)$%v2D++Y}+eyXWQJ_ zwr$(CZQE)qDN@7o~<0zj~dZQI5a z={M_@8yHhrPoD#~krXLjrek;mh6^stMZk>zxRAvFu-4yQK;+6?kLv;%ji?S5xfFNk zdSG6`40Fh()WITk?7|2D9p#J&%5hPh^{W3mqV~B=$Gv@M)Ljonp!ZrTTkWBo-0TK;) zTeJMZ_`u{J6aQ>G^u1{Fi3$G}zqmKBn9QUgf{fTyXgd@Sfc~X;m-lS@TDEh~q+f@& zcvoIEIT3Scf?^zr0E&*=x#v+wQVhesZ26aRc5eHD9|ep&WJC1>$jX(e)i)%oZmqrY zwT!Wf(O6rUbaY}gb|HyCI=XIrVE%^{_YjvqnD)v4X(OP(x-#`U%a|Vp>n=%^XC^{h zz{#Xik{%&7u=LxSs}r*8BT)&A+ss9Ao=|$?vs}8 zH~>mw5DhUVBiXo2bJB4fJr#nGg6-Uc&>2WNjygl_;T6`_1fDJr;T52R2g$Ycm7x4QcVoOgns==Rn9w8FX2W z0xXsdEMYSTILJAEBR3p|0E{ve!W*t^>SKJdr38VQ7k=wL>Ivgwgk8@V@7-Sp;gb#a50B<6a%di%TGWr#Sz- zPB+5yBJ%Gbk$C0Yf#YI;v`OZUYa*%sZW7@-*0^$pN~kN5aLe#@pj#PEn6b& u=ZD!4!)A6p?K|58nWheip*lxI+fj^26FD&KDE6QK66Zzkh=N%R69@p;(14Br diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 46f6e2c840b497c68588234d4b98dbeb528e21ec..4898eebbe8b4e33404b74178ad6ca5bb19d174ac 100644 GIT binary patch literal 1490 zcmV;@1ugngNk&G>1pok7MM6+kP&iD!1pojqFTe{B)rNw$ZJ2~V>~;r2L`;B*0KQa7 z+qRw2lc{anw(Tz4RhPDnm2KO$ZQHhO+jxdt(5|1zuwuYLpI#wi2%RJbIz(cy08RwP47Ivo_um0V zpukSa4ghGWl@NtE!9{z87x_?sj3f9(lt9~#1!pwpC?^2mzX+b!!UYh6)jFhNaAL)p z#KI*C{&^N1A%c;LRREB`y;|80EyMsbXw35zFUcnl3|^rxY5`E5;II?1970}XAC$m_ z1GH|6wrF=y`Hwzg3Rp}U1UoTRplJDYhbTBq<1=Jqvx;$74NJB4u6rv-oi{>=xEe0)X>a8RQ~ZndiE z2k*Kn*eN*21ONa3|L+za?{no$UEq>=`>mDQ!Q5eIWgD!zyM;EuIs1-hyR4b>>R;Bm z0EZn@xYq^hJhsz`=4=J~S;$<-^`JZN$HTM89oTBsdS^8WH&Dwln?NW`2UCbn5Xj;n zJR&C?wfFPvfoZzUa;v4J#WYPnh|*BT;tN4$LB*%aDMmzqgf%BtSB}sD#}y=j;+;ku zV-F7>?jSd6fR{qC+wmXHCYA#yku+zB+I~zTVP|$|1Jhad`u-AG%dHU$pUNW1h^!eo!I#2oe=uO8q1`c!^XRC-Y+mr5}^okAzZ%n%~2 sO5yunUc{PD{)(A>PQYX#ayJG1TqpE|n0hKh-X8-^I literal 1582 zcmV+}2GRLaNk&E{1^@t8MM6+kP&iB(1^@srFTe{BmC)X{$#C@5&$iEO+d8&w9oe>R z^RsQ+wr#F=CrNkLwKLt5p zA#XD@dUjpeAE$b3+L^DxHTFeSf1cS31%p^T>zA;%h{$GrFN-vf0?Y(=!&mW&$5d>Mf0V@R0U<7&@A z0tBskENz}biu4`Tru=##`SZli9Ear751gWr1KE>bu^0_-9y>^*?MI2?4Hj!5lps_l zqky&hoe8SS>b35}A0PaB|Ie=%=C;%&HS_V8@9yzqT+D9l!m$)j2iT7bd4ndj`>&{0 zI8X&=6i~e>3MtYT`te5c(YJvMnse{}88(fQKC9ML@$H;|>CTALF&PUtOv;OJO{I>5%SQ-uq{051ROj z=ZK<90Zt@}qJOcFXex1vg%*Oqi>cN@79tnEeb9D?ZJS+Ryvnwrhe%^Qj)GN=fv~wJ z4Ia4CcSU22ZB1I6T{;)?H;z}}25<5hq(DHUlxtGNLX>?*XLk<3aSz;3Y*X@?${?WG z>ZZLl$pnp@@YgZZ8GX!8a2ci_kin$JyZq&l z+WQ|h1p&RTa-$-XZM?+;MA6j%$Dz^0MF5URk%cWv9#jJa1hQ2gng~)1q&;)!h{nF0 zh@_S(eE$uy!D~GQWk7&ZAhpR+w?!@n_=27s!nv&FdYBJD5;j5f4%raQa|)yblm_8k zizQMVX;d?hvjARVEdTNmZMYu3oKKK^#*+lW1-K){N^CLIDiGSwVH@qzz8TN?01jh! zfPE<(%6{C46Bb-b_OK8kRla|rD+oqOp^!kit!^9d(J)TN@icCrKMs5;z)f@^j{D$- zkmDupfr^AeJ2BQ0fj*mIAm89KGdE%kUO~dlE(kG-o9JZ~NTHNd2QE^-N}*l{Qak`~ z8xCm(@dp!d24P?N(1nkME(1RgnG8@Ou9gc1W;< z@tDqmIZX=Nn0Yh)0%GQjJhIcj4~+4qOPh5VR2pcT1&Z^0If|7Ade~J)DVI8brzEH| z$>|g*%BvL%7NeX4b;xu3j({|1Jk5CvB+i{UDNJ+`Gy&6MP4?dXr2%v z*Nu9Xx+)?RSFxBB#9IWkzpxGxPiEXEuc-*RmKBB zPEMBwSy1Z;?f$WPj(gjDZ6t$4f!KyzZeqKybKR>HK`rxs=MoG-X;2fiyvLw6){S*; zp{HvVZSiKOk1fGEMTs%Y_%Ai#x4&Rr^@6QFKL4^uv1X>@X!*%-HqHpN6a$NC~ g03|3-Q8-F!flODK1e6A4LHS}!oDfP^vhRcd0JD?l-T(jq diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index 75b8c6f28b8e2ea6007e59d861563e2b41fbfd5b..5b3a93fc6700477559877dbf4142eec4c0bf4720 100644 GIT binary patch literal 1184 zcmV;R1Yi47Nk&GP1ONb6MM6+kP&iDB1ONapU%(d-b zZQHhO`<%5gwrx+Pa!{3IPjal}U!AIOYTMeBY~~p%4*+VjnV_1CV@4y%W&WRCj%{tn zp1q81+qTQBOu!gTR?76LQzfIZRpqyB>I?p7V|J zKtM%2RwrmC-Vz-DR1u>TdiR_jO~qUw{9YgNMJ2_)K4Kh%d?5N%zfy{PdC&xi_(1%w zL8TP=dXFg(|0Sk5mN?gxsnk&~Z& z#cZZB5&&@^#+b1nVqd0WZbg=(`8)vP6%Y_V1VG#jfnT~pwh~?qfOsBT3Bx-<#1q&` zn23W~UZg9g0{~(>x?)U60K~Q!a~_STr!#68>xBD26k82a-#FOdNul@IZJm!7Dgj&lftyI?|W%_|Um>luIwssIqz@hh;Mc3682 zEKStmSxJA?frxc%*@hNKSIc_ZVFARJwBzTk8BHof05B|v zfOsDOqim}Hn3dO#W5|MSA}8Q^8tF*Y#1}k=@AJIRHuh6W32b*k@QRuS`kHW!Z4H;1Y_WiP9as77uS3|S^VHF?P(+^8Qzz6bK?-sQDIKnAnCc;FB##2CK?*_;2)7^x2}q@n3<&jKO9248CnTW& literal 1306 zcmV+#1?BouNk&Ez1pok7MM6+kP&iBm1pojqU%(d-b%uhrZJ2~V@9qMKhzTInq|p!A zC`g&MPxZ3rTi|YyPvDRpDnqtNr_o(9$=#bphQ^TG-Qktp{l(pxv+32}kv;ziIJT`F zdtUywZQCyY^-my9M)R+f=~JglMq{h8ZQcoxg#Dk{IaAv&iCJ65^!$YHuY+opAp+hXWOi7RVi&dr~ebczgQC^Zb9!?ILB6W z&KL=1lH{WZg*_gz55l1#$7G@*Ez>nU(PQ9g7x*y^$;8BsgiIOQBPdANFjRYQIVNF% zIKNobzJmM`Kl0atejL6XY}!GbiJ!9s@h$%)tQg7fZ#bMYK#Z4_a#cb6N?0-uE;rkB zAjEVWAB5$tg!r>XM7X&d%P?^*(4CxovB}-*XdP4!Y$I=#+n1pRm>&2-(JHsEy)E!x zX3|s9HBq%cE0XdS@goLM%Hn-uqvvpFr5FX4UD}B|y|8T~S5k&J}r~MI; zdt){wYg&80`}F!8hpHI+mnrga#0c}MtIr+x#}+*i5j_|+JsAXmKH9VYm?C#4j3Ao! zx923f1_*E1d+gEb%cQ*MzB{t=2Q}`E8!_j@eK4Am1%R~loyow%3>t_a2SIDCiqiXE|8_4lAKDMs4Iz) zcDsQ~bJ-b|V`bw6hxF(3y&?tl!HL&#gozm7l0;oNUZ6aPzL80h%yK2?-~fEJ-3O*_ z4Eu5MD$C6>2S&NI@}L|TAQvJcWOtTnI}V6f4kM}9DvZ3-WmCa@a>evwJ%d_r?Ihmk zx(7bUAlC>dsS?uN;d$?5g3yV6%E9ycaV4_x`RuttzEdg&1N0&B+D=5D2&&k~Jl|-2 zRkn>%KQVxxN1l*=MZdHq6f1^gq70l;ZV>z7kcB@4@%cPe z)cqac_Ql9j$tt(6{cRKD8F6Qmi~F9c9x=bf{cvz0>Lz^xX{5FuM1c=#g2AB5aVCWkM;aN=2Z;L#s6r644ieflYql%Po#FAg7dnOn Q1u^cxAs{`U@Im?4Qe}IQL;wH) diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index d92ac47658ddda6c22c98cd1de43bfef7ee3c899..e963f60ca0147dd0c9233121d17eeb1fdb01d854 100644 GIT binary patch literal 2916 zcmV-q3!C&(Nk&Fo3jhFDMM6+kP&iCb3jhEwU%(d-^@f7BZ6t?3?Cl;15itSoJ5@B1 zLzy>SzBqZZQGQ#3|6h&d=6^BUVPOfm~ORN z>dN`=Whu}-Car78@SK`bn^iSN?F)<*8W~?^J1?7OoRU$??WAYDj*v!e+u2A#?RL

AwNk0 zX&~KXkPMIc=jo)r?!mu5H1j``5Yh3txjc@D#F$JbS4a*SAfN(c3TS1F-AA(j)pipi za?d=RBN8zgPact0!5F0qQYhE8EQOAu$g*75wJ4>G{TC;U1PnPh2j_@HOZJd5!5Foy zNMUHkL1bB!GIsO-i58J_<2fE8(UJ3{M=*s^{zriVx(88fK-rWTM2F}(2J;Y!oE#v% zf>~~$K$Zj7qU^@04Fl?uNZ zdD$Qwk;IP>)TM@YDf@$s$PM8kDmw*h4XD9`R>rD!0gj#lJmktf!IBg;VS%#5{cTw2 zNp=!Ps$WGEQBy_{OME*@iYF!VkjT_j;Re*Cfy;)bouEK3D;{$+;h26E(jWmh1c;P$#g1haSV-T(-X_U=uBhQ_RC)du>=Gm=C1iC6&x zmqi@noX5L3g37LeKn;;mY(_Kk2yt&V0jDrz+xc}04fJnXDiJ6UKP8xT^v0$s>@bZuaZ zd$P4~Ie4c~XqxesWOd7YR7RB0gW#Y;l4~gAHX@~n#hGdJnOC$8RwZ7{LgOLyQgl?I5^(r) zARQ-F84pq^jV#pR)shkOQCWqeOYD(6xU;1*jkmtvrd#tE2!(0A`~00<5kqT>Lo-%S=%rg9g3;KnDhhj%HbivWhI zXejLe5ZI1`SVrIs{ALDr2nE@P{s94&5zByg5)H|vnH`-xo3I3)HI-9Lk1c$oLf(hS z^*m4?PDuLQ`t07B8Z{b!CTfY`z=*<&=hhN5fl zg6@8bO`MhfT-9x0L7x;rZs3x;=Jy3M#hMQ1>d{{T^qjwp;_B6_Z4etgqn_X|=apT( zdUf|yAj5v;nQC$Cs#ZNJLVC^@Fh)c@Vko4xq!-SUK}4&D0Xez-8!oB7ZaSof#->3fw_8A@k|&^oMvh}fA5MWQz>vvAt#oN9!1`FtK#T{O%+ zp*XSUOF@@kS+93)OG`8WsptWDU{d-aQ4Qzkg8aCvETfnD`Ui&VToa{_vtbN&perBLbNTRjYJ$CMj$LA2#;MinN5F_1ML`4vS^SZqbS3@_Dv z!2h`Ypn4kSnou0x^nUl7e#lCNALN4Jv5#qz%E}W5t}uO$LHPJ3s3fS=@U7o~@@h=` zLk`H+on@X8C3@m~MZv zAzGRgX2; zDjK`N`+HBX>|mB36@cm$UdLA33YE^pwrlTQ`%=FN?+{5g^xq-}^Iy#APO;E@p*WiQ z#^TcowFp^ynITxNeXKW#$ZVnL0!yFy$IA>$sH=Pme=Zf+ZvCVm)F&Bp73+J#nlD?1 zKS?0RDRklu6rbVv}m59iu%D;X|s5o z_ELE*V7kl7D-A$Br^l`-{h&TFOIUyVR_Swi-*87o>W8v488qOw?e_~sXq&+fMNio1 z7kFMYxg;^0^75A`K?^P$KkEv@wT)-HqBE@V5?p_G*5wkjD=&YJ!9{h;o;db@0#p>) z#3g^i17Fqb`@2ZCQG<-orKE@a+YASKlsN+eo%6Zr`ou%ZqRMw- zjZh4Si3z)v{cuA^(=GX0i3at7_e|yEbYTA|-{mhH*m@x&jDkWtJ9cQz5Pjf))}=4~ z{*)`HO!LvWvIOF1nKyycTVqzeePGLkiQ?M0XzOJc<7Vk}vsaQonTR_$Qk_T-y$gv$)LS^}eKUuU_)xdQZ3cy+_W0m4`MR)plIxWyQmq z?!S23-|IhF>g0D;y)Ws^TgHJ+qdWf6k`I`PWi4<))NZ@RqVOU$WK`aY1g Ol}e>jTkHE$qG18o!l$?Z literal 3168 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 literal 1790 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 literal 4858 zcmV@AXqD1wMmU@&O6 z@OmCZ=qOWhLMYrcaTL$FEzaZ&YZiILzQ;Nv>y4lQFOzC8+ zsyY-CwKMKUMk!?p24FugI#oQ;aiujN@TvS(xTyS|nHS4JyR8^z1krBGctt&=%KK)0eb5u2G&Kk(GB2fhe zqdf=m%vQpoA{y4ubY-lrFs+MS5q{}Ot2)e7e+);KXquw3qAc#trA{%+coHwNi6T?F zB4td`NSpf#s17rgp#g`!z+46i50gYf9IZdrdOXM@HsFhdPM|=`=MZ zUlVk76i^+qzShy~$OcnW^yM03Q*&+^UujV7Ov744V|9fa&_`LiJ-uuPvR(DDel#`3 zU(p!iH=t1MGR1t1r|2Tx0?d!VKri|{GF3M^jZ(KI;HKly!+Ek4_o$!w#7LkgJ~LySH(oI3~49t{YH!an#i z$lL)KA0Op-a1HJbHNEhp31vOjJjbG%B0rev`XiF(Mb`;HD#Rk#=7bD#DnPwV32VYpI{d zp&1Iz2u`TK6+o@p$zoA%C3;=0M&Wb9Hd7UZzGy5uyPqh8D0~BzvxX?aj|@`}JAlu5 zv*?l>yGQR@rcWQ4gDK@ud>>P$dukYL?u z^dZq>aldl5dxX#EEJP8p*(AC!{lVa|5p?w`aUc0bBtbfu2Z zuzdDB!!NXauT!R7hsRlX6gVG=+TdZptvnxrI^eMyZsmL|j)sos${}dtL|+YVZ}bOc z2z-VXaA*dKfw{U~v@E2)z$>2kuWgDP2uV3}W`f)l&TRs1O}G*x??(l)GQh zt_$Vhrh{;%!|*zfGs^q8{kSCE8!6lElJ9-t=kvpNcDbh9&-b^-?K0CCK)^BkmhJvE7r5&cqq31ahyQmiq4(|y>|b!Wt~9c* zpzml(j9Y?pygRtZ8&baiN&8N8eQM`ccDhBtiCaWOkfay(1)=++GjK5i5u?z?qt1(| zrSF(Npo+GfS_vuN2WAHHMauCXa}3Fcn}8ElX7z@0{;o3%javrDfJ)l6A1 zWI|5fV5#uCs#_CVy~2G3cWFVFqBH741|N)HU?&g8X^sU7$>dz1oajaTr%{b}_@1!M zfKqfZC&W2>f$x2hr%Tci02$l_mqEuA5#w-?cN23Z=esd6HsIgEFRy0TEB-Z0b`8=1JADu2Z$;ndF zn$UPpQ>%{epkhv6;iOH-{2Px>s0(rHU={FK6*o*5^?_&)Y*-@P+MA&oi8;_jnNLKw zCbIoxrt2L9uPM-%ZGAi;>_p*X|U ziAU3jt^oB|FH<9-06Jhx$no5cKmAQBA9%$U?60Q;+6Xgbp*&mC@BE-3tWmhkg2Fhv z*vhtCMtfZW8QATTp#?~K)*=cb;Oe34txBCik$GZ!mB zwI%LFEs`0!(wUSc>&oE~(52l7GN2*y&BwVSB$Aj5G{fCXjU+kP=9x2>kaWL8FnJKV zLE7~o2P|nc&hbo+2v^(2c#F$a&bGT7LfX4!Kxc{hEqrbh;agNdKf!MtmR(46#kwr+!E)2 z%vKiH1|ec^-$)R0rSUIouzi49 z$e!YiF|uuO-^9Cs98I8g7(-1HmR{+N$FmWn0o_m1o+@pQ$|EwA@zAI$ZPsVsW z8fiGb03634jputIU`0LP_&S(47HK@U17V@w2HztiEM%O$`XP&FQ?V!l^dP+V(u^An3Ot8rE2}I)}tAKmHlMl#y79FsU^eZ(I zL_8JsA?kF6VvRsk)6#Dd@&N{58{};=j2MAyMLiz`d>jUdx*GVr9CBdE(Gr=NeZesRognJ&m@e-NEp`Ns@`63h(Clb z=_#lWnL*@%*wuBJB7B?{nD^Gm7P8!!N+D!}=ACg8f< zE7Y>lSYi~8_i^z8rwA`+NI&1j)GZr>uoZY71u+aLDJj_&9Mi9as0W}faKc2H{jsx~ z)AK~|y_gnQKcgbrpo<~NgwWAA8z-Ss!19`!njYZzF482Fl>qH*6p!iu#PBDDk}pPH1_44ysRAVgIW;v)ewhdeyER@Kba%MA-VwacW_*^ zNtatj>f-)*B|e1S&@s98VCdqCLon}d>NCzsNMe%GmE zoRP30 zXAYN*(*ffHl-$+A$4jlakojQvWdpAtjDvi4*Zq{n3$mpP-<|MyHGOqzMv~%q1il6$ z0?}xx=TVvxHsBIgmM$EBKcygWg!@M!*^KOr%^>9i@DTj&dH5>M$K~*lY%?PHwrxFC zF6^lf7OWZ3mPjo{bWl)EFIW{>sUoLQ+VC`o!HMIEg;S0 z_v6(d^Wzu*oz&Jy;dv5p?obyRf3q`ypI-&H18QK|j2A?X^~^Bf+|DaW)rrw6d1@HX zTPt?)YFS36m+SF6paYIZd?4Q1^l@MaU2)>yFpo1YW;Spv6ZF_y)>c&ha1C8`M8Ikx zZ4#R3dazaySX;5k9_%f^no;&`m-QuS0ZSl2+mSx)`m#;=to%JBp+ex?NHFFwFAM}r zc3Z$N-dFx*XK%#h#uf5oWTDiCf*^Ui@2_PD3y58T1N}bh&Qw8+Fa*qX72g6JhHWDh%HYLe( zdE7|auc<2giOD`g}^SU3z z?hNyr+*ify+I(wDfb^$a*}~py5lJ~&S|GXVY#kqRojx-=ZAlwTCKSgDcE~>TX2*fD^~6EaAiJ~YFLq!URt7Xhytd(J z>A==ro&}O6Gvc!GnoI|BA+Uqu2EuDd`Csjnlg#gqr7RJvnR~<%xwjr|;Y*!vkSQ&h z>MjhCuM$0{0!tWp8%u(eLB&=cX>MO%RO$@bj04Th60UwYPv^Hio&-`i18+E!_Z(`* zE2kn3lr|8lC*|K*%YnYQ(AXd_VCBqJMhoQAYug&z%U2s|^Z&VlC@77q$PsVmDNzV) zppXk1WMAym!~A}!iNVlWBB040(6~DE&Pz-j?9UfD%@i$KQYfrp)}U=}@q${y>q=J} zRJ_&sNBH|<2g`F;a;0Uiog9q;xX8gn{qtrQCRML1T}yaD@m!lQYW5(oh7)dFS7u?- zOP#*2FPiD-g|TqO#>y4YjO0Kpb(EFt?aP-qBWdByHv$hRuu4YFTQVNli>m62tszyN zw63Nfdh#SoFLkhd0%$Bt1Tr<^HI|5_lQ006Ihg!CPpzXlsk*ejSXGfbUZkcXf+3)- zNC!oKzpGrhtV;zboUD5}b9ELBg&Ad~c`x4390Z=GO4YrWlZN4SzwMACIVFmE0=Q1bBBp%)Ncn;6xl7V#gF;X;qbdvd%S+Shi@&YZ;17k(zlJvOZ*{R_o&T#7N;<)rBnHBMcHg70VEMhrJTx!UhV_Q~O gn9Z}WaG5Q~8{%?JYnG{x(`ho1(`nM@Gk2~E00ePdTL1t6 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index 7b5e294ca8a43b2881ccbb3ab3cff4135c2d9fac..71adf050d0eae99adfadc2f8f35bdb175feecdf4 100644 GIT binary patch literal 1890 zcmV-o2c7s*Nk&Fm2LJ$9MM6+kP&iCZ2LJ#szrZgLwT9xhZ5(O;wUb;g&xn`+7Stw< zXm=n$pPa932MwHQqy*ZwO}lxuZR7u++O}=mwr$(CZQHhOH@2NT-sGOxdUw3q4FirS z00gR+ZQC6}la0B#12oph+1W;tr+eaADgZQ~%e z?W9hZHmPjq52&}Rr1NLnsO&lz-4o#Hu}#THDp^Yv`%$f5YW%2{G_f}FOM@Q~5y?QA zV(G$u;1dx=l0ilivBj0|4>xiC3c$EmQN2lsNOxY83>;GL^&W#E*)%G2IT{ZYE zA{gN~gm^n&Xhu`s(pS|cizOu>T`AO;W%V^m#E>r*>C2LaXqK!1NDSp%vA!&7^a2nE zP@ppln!Is}0vvd!OEd;*%qSF|j^W|Nt}_%>N?1H(69{fa3(TBc8u1UsXMHSYLV;j( z9^lOC%*@yi6rcBiMlV6R3`L^|7MB>0?Km)uMWQbXT{!9^Ns=@LRWM^WQ^8;iq3;R9 zS_qm>dS6bm6Wa-4*p4rKbr^cH6Wh;$j3xyTQCy7kE6uFKD+jiOd@u!}w+&;yM*I`< z&>A}fzK;OKD?rAc#Mu^>fa*iQk_8G>mxGYEe7z3wm;h76Un8TwPz2Qd&hK#uc{WEx@oe4T}Fr-WZ=(}Q1$iUDCMEaIE3z_ zABL1jl2o2z<_lYmIr2{?g-rzLs-E*gbt#SAnthA_zi%_7FZbrK8N$T?o}1}#h>gaAocCKlEK42 zBXXe*mJ|T##(VJl^{JMWK$y|hcL?#i3I+kNz1*{(tqM4%mVAms2iZcZM1PO$@y@Yg{O)XTPZc=rqQDoC??3qij^+&wS7=}1_*=x}JE>q90Z>Ri{SmgV>r-T4 zW&y($=3lstIX!XrfErLGAhz*pABMP7EAPX^{^<<~SD23V2pe}Rd<#(pGT`CfF&NQE zJ#qLZeuvOG7u(_WB$Z`T^*6Y z7r23S`>-P+$$Q{HU_+1ti10vQ$9N<+vd`*0@%|Cs#}D`u<(6Py;4l1ykMIBoK1}Xs zBzKHQpqm6>R3H#=9()kmDzQacBYUH)X+t}XPJF)n|IzhL^M-->8|EYJ+W+I9w;fLz zX_U>`GK7)`4g@wO!GJ=58~hN~B)+p9_D0S|u7-JoI!1MM^y0pQFYuEzwB^|te$@~_ zSq);a5aFJU5!*PWlcSTfkt1y60$^yWstB=hwju$`u&Dx)CKY)EBNA~)Y@F8C(b1L6 zoy>#zV6Uy+Y5nTFe%L@jUhrQz}=-Bfq~yK9vB$tRusG>P7Ral%qB>|#lBw% c=KcKGrh#FmQpjwK2>@t}VW!f{0Hmi~1aO6K_y7O^ literal 2270 zcmV<42qE`UNk&H22mkbh{+D;}D*GaJU6r(otoS6exk1}Y@;RY1kxHg=>$7&I zyLV2QPMrl=*`4^b0Wk~!f=$}lwr$(CZQC|(mvh^;u|4@-8?kNMwpph$E8F=4>g_7& zY}=~r`s4Gya{}0JwkfHQge4J4l=_kUV3G+&@);2GBf+E)j4;NSq^YEbq!;x^2N+{4 z5+qI%N-!oFFF7E&EBPX+l+;RUDDRO}W&gY64~!)egyl0P87;XkfptQA({<(;#`1~E zXUt)zX_}J2DR2k?=uq-{xoMh1?P4sSpaf$jra9iJ>;Q}oWv3dG_jL%VURcQ9KM-eh&Tnqsqg34bq^mVO2X-4h4l?|s)mWzNek7-8CUpSaS|>TM`BeClhm3c zlpu1a*+Si6CQmy?LTD#akwhiKoob^%X{PQ6rpCW1Nd%HCZ6sX2WBPqWWFo06je^U! z%=qi4r3f%Gk@RIo!{r-h`csUbfKnjyHM9KhmnJ}@_%AjFFi2*aAff2jYZw@*Ntrfz zx}@n7XF!x8VTK1O%C27x->QIuE}RC51E5uhET8@HrFUO{^6fj{z43!fKRS2e6eSOT z>L3329STZ;Ah9j9YL~;p+hF^z%!ymTcGe=93#UMBXsDwP$keF=wGLSfnTOT*f5S?5 z-+gzt6fUj#BCbyZw>mE-9sf*ZUO>8QA1GC(kA*+-NVXc-vb|jJ9|E@q$H4KQLgp|y zp(Cf>@n*}MwkjEDR}A~~ADPd6J9A0TL?CNa;fo(Eg_EkaSf)XF&c*db;0oT!4ft0e z^Hy$ftp$xbW%$l5OR?vKZ9(;B=_I}Z3N1U#)V1^m?&pif9sx1 z&gSyKIe!M{ymPvv4=6b5P_`P!@F_?<4_ZxJn9Mon!$Oqn@#QzTuRY7+YK$aDQgd%h z=Gaj1xLq#GtF{WMa4JVY>V;6~8;?r&>lcG792~Ar2x&5 zK<4vbCaRbMt6Q#Cv2HC`H7mhY?2zRr7~?e5oI$(k{iCV)M-7gJtNC$g=eb5jj|u^q z_i_XBF#y0+XG?T-H>L?c z*Hz%|YJjUdr{eAt0hjwPLz_-~hio?w0ZMDLJv&fb{9U-3F9!;}sYX?>?NJSz4w*7+ z#};7I!FDA#>)3HW7xET%1YaMOhA|X3Uj{^!j)14G0dB&gH*)X27sENvc{eY?&7Ht) zf~D;FfS@m@^I4w43*o5+xF-|g_%7^^t}fL+Kt@JJ#$zeK?MX&P#&cNyNcLbeLL0Fr zy8Z%`jMgf2tFr6q@-%b}f39UUe(&byK%`*l{+xss`*1Snq5LBHL9tQW;C}3Zop}-; z;RqI1V;EeE$I}b0CZ#m~DOoLSd?~<|z6SVL0=Cbi<6lnFno)8V5o&z_Et>Iso(uLp z3_^<$^rkuG2)&O-@Vi+#a?gi0pGON7 zvLT>J$Y^^mKLc5dyO&byx{<&Jj9c_WdNG5`Wk6>1)a%^+DpOCTq%9qoHyqBng6Bb- z1W_7Ot2Lz{u^VLcqXItcgDWUQM)Bsvf@r)_&md?#AmI^JW!MS!bHS3QQTZBq|-%?v}Ty{ zojyqTJXtk4(%H$u!Z-=cKw?O4OU;q?NY4vgY|3C3XZd_E@cFV9&qzJirP;|_XpuI} zAOeZ{=WU}s(go>#vQxF_#0rnc<50Sj`imEPJkc(c=P>7yJ_{4`{DlT1P=w=19%;Iz z&PeyQ^!c>47kHoAnm)|nCiSEF{b)yZ&hX(Q)?2^bQs;ko<6%JpLqdgqqyf@$BV9Mp z%Ua8zkK1&DOBeWD%Kw^b>IiD9qkL^aO|@nHKi}u$T>hvnYZ+|aGVbrA{74iDF(O46 zi6hxq<~llWt#@4b4l7+enBQCJZ}(WRN1#cqP&XX_q${=}i5}d4Kx%%CT8R0oxFa zTw#Qf7?QjrYu;F-S!gBoLo>(D%ev#fX<L^1JE!GAz0EC0A#=JB3kxGEC2ui diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index 61466d15563562c55a36aea6fc3308d3190eeaca..c436d4dc4a070a06dd2f0ce9f953e0acb68b2eb1 100644 GIT binary patch literal 6314 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 z zG`Njsch%;e+C4yr5BvS!-=3TFy^|){aW$HtgmLE_V~GvPNuC%P5KPDitfXhG3>fir zz)li~G0y;e@TDvu)KR!26kRSL^~#R-$cza9$K_gK=Tq7>A9wXOy0NJzW>i_@% literal 6698 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 AhyVZp From cc493452f5688fe9418c3ebcc9e9e7b508409d51 Mon Sep 17 00:00:00 2001 From: Sangyoon Date: Fri, 10 Oct 2025 23:24:29 +0900 Subject: [PATCH 2/4] =?UTF-8?q?#8=20[REFAC]=20=EB=82=B4=EB=B9=84=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EB=9D=BC=EC=9A=B0=ED=8A=B8=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=8F=20FAB=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 3 + .../android/app/navigation/AppNavHost.kt | 107 +++++++++--------- .../android/feature/part/ui/PartScreen.kt | 101 +++++++++-------- app/src/main/res/drawable/cart.xml | 13 +++ app/src/main/res/drawable/dashboard.xml | 9 ++ app/src/main/res/drawable/delivery.xml | 13 +++ app/src/main/res/drawable/employee.xml | 9 ++ app/src/main/res/drawable/orders.xml | 9 ++ app/src/main/res/drawable/parts.xml | 9 ++ app/src/main/res/drawable/search.xml | 13 +++ app/src/main/res/drawable/settings.xml | 13 +++ app/src/main/res/values/strings.xml | 8 +- gradle/libs.versions.toml | 7 +- 13 files changed, 205 insertions(+), 109 deletions(-) create mode 100644 app/src/main/res/drawable/cart.xml create mode 100644 app/src/main/res/drawable/dashboard.xml create mode 100644 app/src/main/res/drawable/delivery.xml create mode 100644 app/src/main/res/drawable/employee.xml create mode 100644 app/src/main/res/drawable/orders.xml create mode 100644 app/src/main/res/drawable/parts.xml create mode 100644 app/src/main/res/drawable/search.xml create mode 100644 app/src/main/res/drawable/settings.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6dfe38b..9ccbfc2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -79,6 +79,9 @@ dependencies { implementation(libs.converter.gson) implementation(libs.androidx.core.splashscreen) + implementation(libs.androidx.material) + implementation(libs.androidx.material.icons.core) + implementation(libs.androidx.material.icons.extended) implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) diff --git a/app/src/main/java/com/sampoom/android/app/navigation/AppNavHost.kt b/app/src/main/java/com/sampoom/android/app/navigation/AppNavHost.kt index da7e9d9..b5c7e63 100644 --- a/app/src/main/java/com/sampoom/android/app/navigation/AppNavHost.kt +++ b/app/src/main/java/com/sampoom/android/app/navigation/AppNavHost.kt @@ -1,11 +1,7 @@ package com.sampoom.android.app.navigation -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Button +import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBarItem @@ -14,7 +10,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.navigation.NavHostController @@ -30,23 +25,25 @@ const val ROUTE_LOGIN = "login" const val ROUTE_HOME = "home" // Main Screen -const val ROUTE_PART = "part" -const val ROUTE_INVENTORY = "inventory" -const val ROUTE_PROFILE = "profile" -const val ROUTE_SETTINGS = "settings" +const val ROUTE_DASHBOARD = "dashboard" +const val ROUTE_DELIVERY = "delivery" +const val ROUTE_CART = "cart" +const val ROUTE_ORDERS = "orders" // Detail Screen -const val ROUTE_DETAIL = "detail" +const val ROUTE_PARTS = "parts" +const val ROUTE_EMPLOYEE = "employee" +const val ROUTE_SETTINGS = "settings" sealed class BottomNavItem( val route: String, val title: Int, val icon: Int ) { - object Part : BottomNavItem(ROUTE_PART, R.string.nav_part, R.drawable.outline_home_24) - object Inventory : BottomNavItem(ROUTE_INVENTORY, R.string.nav_inventory, R.drawable.outline_home_24) - object Profile : BottomNavItem(ROUTE_PROFILE, R.string.nav_profile, R.drawable.outline_home_24) - object Settings : BottomNavItem(ROUTE_SETTINGS, R.string.nav_setting, R.drawable.outline_home_24) + object Dashboard : BottomNavItem(ROUTE_DASHBOARD, R.string.nav_dashboard, R.drawable.dashboard) + object Delivery : BottomNavItem(ROUTE_DELIVERY, R.string.nav_delivery, R.drawable.delivery) + object Cart : BottomNavItem(ROUTE_CART, R.string.nav_cart, R.drawable.cart) + object Orders : BottomNavItem(ROUTE_ORDERS, R.string.nav_order, R.drawable.orders) } @Composable @@ -68,7 +65,7 @@ fun AppNavHost() { }) } composable(ROUTE_HOME) { MainScreen(navController) } - composable(ROUTE_DETAIL) { DetailScreen() } + composable(ROUTE_PARTS) { PartScreen() } } } @@ -79,30 +76,46 @@ fun MainScreen( val navController = rememberNavController() Scaffold( - bottomBar = { - BottomNavigationBar(navController) - } + floatingActionButton = { FloatingActionButton(parentNavController) }, + bottomBar = { BottomNavigationBar(navController) } ) { innerPadding -> NavHost( navController = navController, - startDestination = ROUTE_PART, - modifier = Modifier.background(Color.Green).padding(innerPadding) + startDestination = ROUTE_DASHBOARD, + modifier = Modifier.padding(innerPadding) ) { - composable(ROUTE_PART) { PartScreen() } - composable(ROUTE_INVENTORY) { InventoryScreen() } - composable(ROUTE_PROFILE) { ProfileScreen() } - composable(ROUTE_SETTINGS) { SettingsScreen(parentNavController) } + composable(ROUTE_DASHBOARD) { DashboardScreen() } + composable(ROUTE_DELIVERY) { DeliveryScreen() } + composable(ROUTE_CART) { CartScreen() } + composable(ROUTE_ORDERS) { OrderScreen() } + } + } +} + +@Composable +fun FloatingActionButton(navController: NavHostController) { + FloatingActionButton( + onClick = { + navController.navigate(ROUTE_PARTS) { + popUpTo(navController.graph.startDestinationId) { + saveState = true + } + launchSingleTop = true + restoreState = true + } } + ) { + Icon(painterResource(R.drawable.parts), contentDescription = stringResource(R.string.part_title)) } } @Composable fun BottomNavigationBar(navController: NavHostController) { val bottomNavItems = listOf( - BottomNavItem.Part, - BottomNavItem.Inventory, - BottomNavItem.Profile, - BottomNavItem.Settings, + BottomNavItem.Dashboard, + BottomNavItem.Delivery, + BottomNavItem.Cart, + BottomNavItem.Orders, ) NavigationBar { @@ -130,41 +143,25 @@ fun BottomNavigationBar(navController: NavHostController) { // 임시 화면들 (실제로는 각각의 feature 모듈에서 구현) @Composable -private fun InventoryScreen() { +private fun DashboardScreen() { // 홈 화면 구현 - Text("인벤토리 화면") + Text("대시보드 화면") } @Composable -private fun ProfileScreen() { +private fun DeliveryScreen() { // 프로필 화면 구현 - Text("프로필 화면") + Text("Delivery 화면") } @Composable -private fun SettingsScreen( - navController: NavHostController -) { - Column( - modifier = Modifier.fillMaxSize() - ) { - // 설정 화면 구현 - Text("설정 화면") - Button( - onClick = { navController.navigate(ROUTE_DETAIL) } - ) { - Text("상세 화면") - } - } +private fun CartScreen() { + // 프로필 화면 구현 + Text("Cart 화면") } @Composable -private fun DetailScreen() { - // 설정 화면 구현 - Scaffold { innerPadding -> - Box(Modifier.fillMaxSize().background(Color.Red).padding(innerPadding) - ) { - Text("상세 화면") - } - } +private fun OrderScreen() { + // 프로필 화면 구현 + Text("Order 화면") } \ No newline at end of file diff --git a/app/src/main/java/com/sampoom/android/feature/part/ui/PartScreen.kt b/app/src/main/java/com/sampoom/android/feature/part/ui/PartScreen.kt index 2f48b78..1164887 100644 --- a/app/src/main/java/com/sampoom/android/feature/part/ui/PartScreen.kt +++ b/app/src/main/java/com/sampoom/android/feature/part/ui/PartScreen.kt @@ -20,60 +20,63 @@ fun PartScreen( ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() - Column( - modifier = Modifier - .fillMaxSize() - .padding(16.dp) - ) { - Text( - text = stringResource(R.string.part_title), - style = MaterialTheme.typography.headlineMedium, - fontWeight = FontWeight.Bold, - modifier = Modifier.padding(bottom = 16.dp) - ) + Scaffold { innerPadding -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(innerPadding) + .padding(16.dp) + ) { + Text( + text = stringResource(R.string.part_title), + style = MaterialTheme.typography.headlineMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(bottom = 16.dp) + ) - when { - uiState.loading -> { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - CircularProgressIndicator() + when { + uiState.loading -> { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator() + } } - } - - uiState.error != null -> { - Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - Text( - text = "${stringResource(R.string.common_error)}: ${uiState.error}", - color = MaterialTheme.colorScheme.error - ) - Spacer(modifier = Modifier.height(16.dp)) - Button(onClick = { viewModel.refreshPart() }) { - Text(stringResource((R.string.common_retry))) + + uiState.error != null -> { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Text( + text = "${stringResource(R.string.common_error)}: ${uiState.error}", + color = MaterialTheme.colorScheme.error + ) + Spacer(modifier = Modifier.height(16.dp)) + Button(onClick = { viewModel.refreshPart() }) { + Text(stringResource((R.string.common_retry))) + } } } - } - - uiState.partList.isEmpty() -> { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - Text(stringResource(R.string.part_empty)) + + uiState.partList.isEmpty() -> { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text(stringResource(R.string.part_empty)) + } } - } - - else -> { - LazyColumn( - verticalArrangement = Arrangement.spacedBy(8.dp) - ) { - items(uiState.partList) { inventory -> - PartItemCard(part = inventory) + + else -> { + LazyColumn( + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + items(uiState.partList) { inventory -> + PartItemCard(part = inventory) + } } } } diff --git a/app/src/main/res/drawable/cart.xml b/app/src/main/res/drawable/cart.xml new file mode 100644 index 0000000..afc4912 --- /dev/null +++ b/app/src/main/res/drawable/cart.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/drawable/dashboard.xml b/app/src/main/res/drawable/dashboard.xml new file mode 100644 index 0000000..c2c0e05 --- /dev/null +++ b/app/src/main/res/drawable/dashboard.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/delivery.xml b/app/src/main/res/drawable/delivery.xml new file mode 100644 index 0000000..ca411d4 --- /dev/null +++ b/app/src/main/res/drawable/delivery.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/drawable/employee.xml b/app/src/main/res/drawable/employee.xml new file mode 100644 index 0000000..8ac942e --- /dev/null +++ b/app/src/main/res/drawable/employee.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/orders.xml b/app/src/main/res/drawable/orders.xml new file mode 100644 index 0000000..7521789 --- /dev/null +++ b/app/src/main/res/drawable/orders.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/parts.xml b/app/src/main/res/drawable/parts.xml new file mode 100644 index 0000000..ff89964 --- /dev/null +++ b/app/src/main/res/drawable/parts.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/search.xml b/app/src/main/res/drawable/search.xml new file mode 100644 index 0000000..519d2d6 --- /dev/null +++ b/app/src/main/res/drawable/search.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/settings.xml b/app/src/main/res/drawable/settings.xml new file mode 100644 index 0000000..20ed042 --- /dev/null +++ b/app/src/main/res/drawable/settings.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9ebea0a..8a5d69e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,10 +2,10 @@ 삼품관리 - 부품 조회 - 인벤토리 - 프로필 - 설정 + 대시보드 + 출고목록 + 장바구니 + 주문관리 로그인 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 14f873b..3c44195 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,9 @@ junitVersion = "1.3.0" espressoCore = "3.7.0" lifecycleRuntimeKtx = "2.9.4" activityCompose = "1.11.0" -composeBom = "2025.09.01" +composeBom = "2025.10.00" +material = "1.9.3" +materialIconsCore = "1.7.8" navigationCompose = "2.9.5" retrofitVersion = "3.0.0" @@ -20,6 +22,9 @@ androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", versi androidx-hilt-lifecycle-viewmodel-compose = { module = "androidx.hilt:hilt-lifecycle-viewmodel-compose", version.ref = "hiltNavigationCompose" } androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hiltNavigationCompose" } androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" } +androidx-material = { module = "androidx.compose.material:material", version.ref = "material" } +androidx-material-icons-core = { module = "androidx.compose.material:material-icons-core", version.ref = "materialIconsCore" } +androidx-material-icons-extended = { module = "androidx.compose.material:material-icons-extended" } converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofitVersion" } hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hiltAndroid" } hilt-android-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hiltAndroid" } From 3ba895e3fbe234390727836f4b85f376201dd29d Mon Sep 17 00:00:00 2001 From: Sangyoon Date: Sat, 11 Oct 2025 00:14:52 +0900 Subject: [PATCH 3/4] =?UTF-8?q?#8=20[FEAT]=20=EA=B3=B5=ED=86=B5=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/core/ui/component/.gitkeep | 0 .../android/core/ui/component/CommonButton.kt | 256 ++++++++++++++++++ .../core/ui/component/CommonTextField.kt | 164 +++++++++++ 3 files changed, 420 insertions(+) delete mode 100644 app/src/main/java/com/sampoom/android/core/ui/component/.gitkeep create mode 100644 app/src/main/java/com/sampoom/android/core/ui/component/CommonButton.kt create mode 100644 app/src/main/java/com/sampoom/android/core/ui/component/CommonTextField.kt diff --git a/app/src/main/java/com/sampoom/android/core/ui/component/.gitkeep b/app/src/main/java/com/sampoom/android/core/ui/component/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/app/src/main/java/com/sampoom/android/core/ui/component/CommonButton.kt b/app/src/main/java/com/sampoom/android/core/ui/component/CommonButton.kt new file mode 100644 index 0000000..a9ba4d0 --- /dev/null +++ b/app/src/main/java/com/sampoom/android/core/ui/component/CommonButton.kt @@ -0,0 +1,256 @@ +package com.sampoom.android.core.ui.component + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.FilledTonalButton +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +/** + * Sampoom common button with multiple visual variants. + * + * Usage + * ----- + * CommonButton( + * text = "Button", + * variant = ButtonVariant.Primary, + * onClick = { ... } + * ) + * + * Optionally pass a leading icon: + * CommonButton( + * text = "Button", + * variant = ButtonVariant.Primary, + * leadingIcon = { Icon(painterResource(R.drawable.parts), contentDescription = null) }, + * onClick = { ... } + * ) + */ +@Composable +fun CommonButton( + text: String, + modifier: Modifier = Modifier, + enabled: Boolean = true, + variant: ButtonVariant = ButtonVariant.Primary, + size: ButtonSize = ButtonSize.Large, + leadingIcon: (@Composable (() -> Unit))? = null, + onClick: () -> Unit +) { + val cs = MaterialTheme.colorScheme + val shape = MaterialTheme.shapes.large + val height = when (size) { + ButtonSize.Large -> 56.dp + ButtonSize.Medium -> 48.dp + ButtonSize.Small -> 40.dp + } + + when (variant) { + ButtonVariant.Primary -> { + Button( + onClick = onClick, + enabled = enabled, + shape = shape, + modifier = modifier.height(height), + colors = ButtonDefaults.buttonColors( + containerColor = cs.primary, + contentColor = cs.onPrimary, + disabledContainerColor = cs.onSurface.copy(alpha = 0.12f), + disabledContentColor = cs.onSurface.copy(alpha = 0.38f), + ) + ) { + if (leadingIcon != null) { + leadingIcon() + } + Text( + text = text, + style = MaterialTheme.typography.labelLarge, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.padding(start = if (leadingIcon != null) 8.dp else 0.dp) + ) + } + } + + // Light/secondary (tonal) filled button + ButtonVariant.Secondary -> { + FilledTonalButton( + onClick = onClick, + enabled = enabled, + shape = shape, + modifier = modifier.height(height), + colors = ButtonDefaults.filledTonalButtonColors( + containerColor = cs.secondaryContainer, + contentColor = cs.onSecondaryContainer, + disabledContainerColor = cs.onSurface.copy(alpha = 0.08f), + disabledContentColor = cs.onSurface.copy(alpha = 0.38f) + ) + ) { + if (leadingIcon != null) { + leadingIcon() + } + Text( + text = text, + style = MaterialTheme.typography.labelLarge, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.padding(start = if (leadingIcon != null) 8.dp else 0.dp) + ) + } + } + + // Outlined with primary border + ButtonVariant.Outlined -> { + OutlinedButton( + onClick = onClick, + enabled = enabled, + shape = shape, + modifier = modifier.height(height), + border = BorderStroke(1.dp, cs.primary), + colors = ButtonDefaults.outlinedButtonColors( + contentColor = cs.primary, + disabledContentColor = cs.onSurface.copy(alpha = 0.38f) + ) + ) { + Text( + text = text, + style = MaterialTheme.typography.labelLarge, + fontWeight = FontWeight.SemiBold + ) + } + } + + // Ghost: no container, subtle onSurface content + ButtonVariant.Ghost -> { + TextButton( + onClick = onClick, + enabled = enabled, + shape = shape, + modifier = modifier.height(height), + colors = ButtonDefaults.textButtonColors( + contentColor = cs.onSurface, + disabledContentColor = cs.onSurface.copy(alpha = 0.38f) + ) + ) { + Text( + text = text, + style = MaterialTheme.typography.labelLarge, + fontWeight = FontWeight.SemiBold + ) + } + } + + // Destructive/Neutral (dark) filled – matches the black fill example + ButtonVariant.Neutral -> { + Button( + onClick = onClick, + enabled = enabled, + shape = shape, + modifier = modifier.height(height), + colors = ButtonDefaults.buttonColors( + containerColor = Color(0xFF000000), + contentColor = Color.White, + disabledContainerColor = cs.onSurface.copy(alpha = 0.12f), + disabledContentColor = cs.onSurface.copy(alpha = 0.38f), + ) + ) { + Text( + text = text, + style = MaterialTheme.typography.labelLarge, + fontWeight = FontWeight.SemiBold + ) + } + } + } +} + +enum class ButtonVariant { + /** Primary filled (purple in design). Accepts optional [leadingIcon]. */ + Primary, + + /** Filled tonal (light purple in design). */ + Secondary, + + /** Outlined with primary border. */ + Outlined, + + /** No container; text only. */ + Ghost, + + /** Solid dark/neutral fill. */ + Neutral, +} + +enum class ButtonSize { Large, Medium, Small } + +@Preview(showBackground = true, backgroundColor = 0xFF0F0F10) +@Composable +private fun CommonButtonPreview_All() { + // Primary + CommonButton( + text = "Button", + variant = ButtonVariant.Primary, + onClick = {} + ) +} + +@Preview(showBackground = true, backgroundColor = 0xFF0F0F10) +@Composable +private fun CommonButtonPreview_Primary_WithIcon() { + CommonButton( + text = "Button", + variant = ButtonVariant.Primary, + leadingIcon = { Icon(painterResource(android.R.drawable.ic_menu_call), contentDescription = null) }, + onClick = {} + ) +} + +@Preview(showBackground = true, backgroundColor = 0xFF0F0F10) +@Composable +private fun CommonButtonPreview_Tonal() { + CommonButton( + text = "Button", + variant = ButtonVariant.Secondary, + onClick = {} + ) +} + +@Preview(showBackground = true, backgroundColor = 0xFF0F0F10) +@Composable +private fun CommonButtonPreview_Outlined() { + CommonButton( + text = "Button", + variant = ButtonVariant.Outlined, + onClick = {} + ) +} + +@Preview(showBackground = true, backgroundColor = 0xFF0F0F10) +@Composable +private fun CommonButtonPreview_Ghost() { + CommonButton( + text = "Button", + variant = ButtonVariant.Ghost, + onClick = {} + ) +} + +@Preview(showBackground = true, backgroundColor = 0xFF0F0F10) +@Composable +private fun CommonButtonPreview_Neutral_Disabled() { + CommonButton( + text = "Button", + variant = ButtonVariant.Neutral, + enabled = false, + onClick = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/sampoom/android/core/ui/component/CommonTextField.kt b/app/src/main/java/com/sampoom/android/core/ui/component/CommonTextField.kt new file mode 100644 index 0000000..52ba4bf --- /dev/null +++ b/app/src/main/java/com/sampoom/android/core/ui/component/CommonTextField.kt @@ -0,0 +1,164 @@ +package com.sampoom.android.core.ui.component + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Visibility +import androidx.compose.material.icons.filled.VisibilityOff +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +enum class TextFieldVariant { Outlined, Filled } + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun CommonTextField( + value: String, + onValueChange: (String) -> Unit, + label: String, + placeholder: String, + modifier: Modifier = Modifier, + enabled: Boolean = true, + isPassword: Boolean = false, + variant: TextFieldVariant = TextFieldVariant.Outlined +) { + var passwordVisible by remember { mutableStateOf(false) } + val darkTheme = isSystemInDarkTheme() + val cs = MaterialTheme.colorScheme + + val textColor = if (darkTheme) Color.White else Color.Black + val containerColor = if (variant == TextFieldVariant.Filled) { + if (darkTheme) Color(0xFF1C1C1E) else Color(0xFFF3F3F3) + } else Color.Transparent + + val focusedBorderColor = cs.primary + val unfocusedBorderColor = if (darkTheme) Color(0xFF666666) else Color(0xFFCCCCCC) + + val trailingIconView = if (isPassword) { + @Composable { + IconButton(onClick = { passwordVisible = !passwordVisible }) { + Icon( + imageVector = if (passwordVisible) Icons.Default.Visibility else Icons.Default.VisibilityOff, + contentDescription = null, + tint = if (darkTheme) Color.White else Color.Black + ) + } + } + } else null + + when (variant) { + TextFieldVariant.Outlined -> { + OutlinedTextField( + value = value, + onValueChange = onValueChange, + label = { Text(text = label, color = textColor) }, + placeholder = { Text(text = placeholder, color = textColor.copy(alpha = 0.4f)) }, + modifier = modifier + .fillMaxWidth() + .padding(vertical = 4.dp), + singleLine = true, + enabled = enabled, + trailingIcon = trailingIconView, + visualTransformation = if (isPassword && !passwordVisible) PasswordVisualTransformation() else VisualTransformation.None, + keyboardOptions = KeyboardOptions(keyboardType = if (isPassword) KeyboardType.Password else KeyboardType.Text), + colors = OutlinedTextFieldDefaults.colors( + focusedBorderColor = focusedBorderColor, + unfocusedBorderColor = unfocusedBorderColor, + disabledBorderColor = Color.Gray, + focusedLabelColor = focusedBorderColor, + unfocusedLabelColor = textColor.copy(alpha = 0.7f), + cursorColor = focusedBorderColor, + focusedTextColor = textColor, + unfocusedTextColor = textColor + ), + shape = MaterialTheme.shapes.medium + ) + } + + TextFieldVariant.Filled -> { + TextField( + value = value, + onValueChange = onValueChange, + label = { Text(text = label, color = textColor) }, + placeholder = { Text(text = placeholder, color = textColor.copy(alpha = 0.4f)) }, + modifier = modifier + .fillMaxWidth() + .padding(vertical = 4.dp), + singleLine = true, + enabled = enabled, + trailingIcon = trailingIconView, + visualTransformation = if (isPassword && !passwordVisible) PasswordVisualTransformation() else VisualTransformation.None, + keyboardOptions = KeyboardOptions(keyboardType = if (isPassword) KeyboardType.Password else KeyboardType.Text), + colors = TextFieldDefaults.colors( + focusedContainerColor = containerColor, + unfocusedContainerColor = containerColor, + disabledContainerColor = containerColor.copy(alpha = 0.5f), + focusedIndicatorColor = focusedBorderColor, + unfocusedIndicatorColor = unfocusedBorderColor, + cursorColor = focusedBorderColor, + focusedTextColor = textColor, + unfocusedTextColor = textColor + ), + shape = MaterialTheme.shapes.medium + ) + } + } +} + +@Preview(showBackground = true) +@Composable +fun Preview_Light_CommonTextFields() { + MaterialTheme { + Column { + CommonTextField( + value = "Example@naver.com", + onValueChange = {}, + label = "이메일 입력", + placeholder = "Example@naver.com", + variant = TextFieldVariant.Outlined + ) + CommonTextField( + value = "", + onValueChange = {}, + label = "비밀번호 입력", + placeholder = "비밀번호 입력", + isPassword = true, + variant = TextFieldVariant.Outlined + ) + } + } +} + +@Preview(showBackground = true) +@Composable +fun Preview_Dark_CommonTextFields() { + MaterialTheme(colorScheme = darkColorScheme()) { + Column { + CommonTextField( + value = "Example@naver.com", + onValueChange = {}, + label = "이메일 입력", + placeholder = "Example@naver.com", + variant = TextFieldVariant.Filled + ) + CommonTextField( + value = "", + onValueChange = {}, + label = "비밀번호 입력", + placeholder = "비밀번호 입력", + isPassword = true, + variant = TextFieldVariant.Filled + ) + } + } +} \ No newline at end of file From bf4ea77e9cf254d71d1ec9621cb4d4e03975e89a Mon Sep 17 00:00:00 2001 From: Sangyoon Date: Sat, 11 Oct 2025 00:36:32 +0900 Subject: [PATCH 4/4] =?UTF-8?q?#8=20[FIX]=20=EC=9D=B4=EB=A6=84=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sampoom/android/app/navigation/AppNavHost.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/sampoom/android/app/navigation/AppNavHost.kt b/app/src/main/java/com/sampoom/android/app/navigation/AppNavHost.kt index b5c7e63..3368d4b 100644 --- a/app/src/main/java/com/sampoom/android/app/navigation/AppNavHost.kt +++ b/app/src/main/java/com/sampoom/android/app/navigation/AppNavHost.kt @@ -76,7 +76,7 @@ fun MainScreen( val navController = rememberNavController() Scaffold( - floatingActionButton = { FloatingActionButton(parentNavController) }, + floatingActionButton = { PartsFab(parentNavController) }, bottomBar = { BottomNavigationBar(navController) } ) { innerPadding -> NavHost( @@ -93,7 +93,7 @@ fun MainScreen( } @Composable -fun FloatingActionButton(navController: NavHostController) { +fun PartsFab(navController: NavHostController) { FloatingActionButton( onClick = { navController.navigate(ROUTE_PARTS) {