From 2b7f3099a62dc474c5ab43b7ccfa8ea05613cad0 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 25 Apr 2024 03:22:52 +0700 Subject: [PATCH] android, desktop: customizable profile images (#4087) * android, desktop: customizable profile images * better * fixes --------- Co-authored-by: Evgeny Poberezkin --- .../views/usersettings/Appearance.android.kt | 17 ++++-- .../drawable/icon_dark_blue_round_common.png | Bin 9870 -> 0 bytes .../res/drawable/icon_round_common.png | Bin 11666 -> 0 bytes .../chat/simplex/common/model/SimpleXAPI.kt | 8 +++ .../simplex/common/views/chat/ChatView.kt | 8 +-- .../common/views/helpers/ChatInfoImage.kt | 55 +++++++++++++++--- .../common/views/onboarding/WhatsNewView.kt | 5 ++ .../common/views/usersettings/Appearance.kt | 38 +++++++++++- .../commonMain/resources/MR/base/strings.xml | 3 + .../resources/MR/images/ic_account_box.svg | 1 + .../MR/images/ic_simplex_dark@4x.png | Bin 0 -> 10121 bytes .../MR/images/ic_simplex_light@4x.png | Bin 0 -> 10325 bytes .../commonMain/resources/MR/ru/strings.xml | 2 + .../views/usersettings/Appearance.desktop.kt | 3 + 14 files changed, 118 insertions(+), 22 deletions(-) delete mode 100644 apps/multiplatform/common/src/androidMain/res/drawable/icon_dark_blue_round_common.png delete mode 100644 apps/multiplatform/common/src/androidMain/res/drawable/icon_round_common.png create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_box.svg create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_dark@4x.png create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_light@4x.png diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt index ccb85c3982..5a60e1d1b0 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt @@ -12,10 +12,12 @@ import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.MaterialTheme.colors import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.* import androidx.compose.ui.layout.ContentScale @@ -34,11 +36,13 @@ import chat.simplex.common.helpers.APPLICATION_ID import chat.simplex.common.helpers.saveAppLocale import chat.simplex.common.views.usersettings.AppearanceScope.ColorEditor import chat.simplex.res.MR +import dev.icerock.moko.resources.ImageResource +import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.delay -enum class AppIcon(val resId: Int) { - DEFAULT(R.drawable.icon_round_common), - DARK_BLUE(R.drawable.icon_dark_blue_round_common), +enum class AppIcon(val image: ImageResource) { + DEFAULT(MR.images.ic_simplex_light), + DARK_BLUE(MR.images.ic_simplex_dark), } @Composable @@ -122,9 +126,8 @@ fun AppearanceScope.AppearanceLayout( LazyRow { items(AppIcon.values().size, { index -> AppIcon.values()[index] }) { index -> val item = AppIcon.values()[index] - val mipmap = ContextCompat.getDrawable(LocalContext.current, item.resId)!! Image( - bitmap = mipmap.toBitmap().asImageBitmap(), + painterResource(item.image), contentDescription = "", contentScale = ContentScale.Fit, modifier = Modifier @@ -132,6 +135,7 @@ fun AppearanceScope.AppearanceLayout( .size(70.dp) .clickable { changeIcon(item) } .padding(10.dp) + .clip(CircleShape) ) if (index + 1 != AppIcon.values().size) { @@ -141,6 +145,9 @@ fun AppearanceScope.AppearanceLayout( } } + SectionDividerSpaced(maxTopPadding = true) + ProfileImageSection() + SectionDividerSpaced(maxTopPadding = true) ThemesSection(systemDarkTheme, showSettingsModal, editColor) SectionBottomSpacer() diff --git a/apps/multiplatform/common/src/androidMain/res/drawable/icon_dark_blue_round_common.png b/apps/multiplatform/common/src/androidMain/res/drawable/icon_dark_blue_round_common.png deleted file mode 100644 index e413ad857da917bb0884e67a77f3db58e7227666..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9870 zcmV;9CUMz`P)=l{Luo|D`;clNn6lfazE_X#F5cRAlL@AsYMPBbmw z@-5%;E#LAj-|BJGHSI>j(M4u#$=BgM`F1=t0SO>D+j4||rv-xUJzgHJW2FgTYCwtA z=(S@TYbT6tt`&@Kt=XlW1A($4Qg5Lme2@POufc2MLL$M+167}zaD*tpG^#k2VCZia zlz+=A7=5E@kN%w*ta!l)j(&%}{?{z1*iT;%ld4D|5);C|@x8<1HUAawc>%}Z$D(86 z*f@uJTBp@qS01K1)}lZ|zxm`E6!6O_&<~k*#q0ESw+o6)X*ZqgHTwD>&dr_6aUoaB z!&C>FOi%7Mwy_l~FSCN9@1o%S({$WK4KPHGQeNe#qFM+pgYW+@w&d&N`)ZEkb}YBx zTK~i~;o3y{bG4c@mv32U5!~i%%POcCNkN=X!FoSJ07Z}`Bpd{mAxXg8=VXfL8q4Qf z1!G2p{{rM)DZ@?aTq-|Q{mrC3fGQ%;Kg}u6Tc++ z=2Hs?$7)bfV%p`8QUDGrzu6*D*}jkZ)3>!aAsRa6#~7m8FRJ5b%cg@YLfp zm8!xKw9cF@GaF?pRAz$tocfaCTdG+~!M_>$DpDUFPpx){T2R`CI^`dV>qO|pyv*=I`yc2#r#p|U3CP-Md($qP zNFDK+3!LLQT_q|xQObDV*`*gp>f2+qx#x8%Zp*t)TB=QH!HT(BjRPICb&(upU1ZZu zKP7HntQ~neC$EGgmut|MWh*qTA{gG+$4rxjURhJItpYcnPg(w`Hl^8RZxB4q!u!15 zH}Tt0P+n*SM{g4F9F5Qsd8MbLPC6^!tOZB53+wy(+r$mnW!>oJcIDy8xHv?V&UR_` zIX%N-Q2&~+P`jcl-PB&^#&Cn4o6f8nj%MZwW4zzbhT2YIX0r>u-_NWZi0ra`T3|#` zSS;#KlWA*oYr2__a|Tb7vCR0%B4*sWoS7$&^Zq=O8aRXLe_79r`Ky_E#zgPWGb`al zrMv23I+Mf5F(=dTazoDGX>=YlzQ2I!9~@%(Cr6oa!%}9Rbbd*JS?OUO9aq81wQ3L^qq^7RRJu;kEYBG{jn5}| z7Bl_*gG~Pv;JEa`VS;Ey=9~!d{B;8X185X|N-lWUsvM;=`f87Qnqnj2sf)`V&U%bh zP;sk(C;PL@fae;dts~?

P2v=o50H|6AgJP1KRn*2~)+x7!;9%&GECyL`NW2N#~*NkXKpACvR^m*CkIa->2e^%1$juPB|J;!_|8P{F)r ztK)JqWk%DkqfB48CfhZUn5`})CmMdKJ7#sD$yN38LbITvQUH|Q4PYpke@HdYmM@w9 zaVT68CRN)ho!yk?=&XR$YZ}v^+gR&xQts5LifS{SN}Esc9y4PS8`KKU-LD0QbPS7K z4x78~ky|pdo4N`rm~qMNO#hGy)t#YQsUSttPD*FLd?Ix>=yny;|GqsuMaGgFqV;=e zsDG{Zm>HFbjXm-;ikXBbm-UddwbHQ5ZpsNfQthsw;`Kd(sG8DKC|qu+B5C^(X3Rl4 zOA?~~*E0Pto4w8!D|Je3Jiv_6Gnv^i7ZaR_Q7JR*p|>M;Ih-GIisnF|bU@DP9=D38 zQ!3d)5QV~}0u@Qy2%;O7C6>;Rw%|OgH+dZ`k<_`qk{OrH^By;Q67|q1W?4hdMhtTS zk+eO-v@71osr$IqWeU?*QDFZ|f%-s51xl5K=mSb;H!hD~Sfl1yvn{f_sSv4pm*5#Y z+k4Ec%ZZf{7`c{WD2wTArZSPbf@MFbGw?uE4{?b8Oir|;+5yQ8Q!D|dtyEawvNF08 z^`p_&pEf4$Y;L&T5%A<{UCtxK>|CU>>k-Q=x)7hq)U^hq&Jv%MgNvzKo5GOJR#Q#1 zBNQ$PR4i?yA^y*nGP8*?+1Oz+rO2&`JDVG_byV|Qn$xruLGsf?Mjp_D13K`SW@na~ z*FFYa#Bb}A`>1MvCDWgwbhf?P3z8}oB62U|W~^U{bk^q@roXT~F*j2o`ZqaG`7H1C z)d@KTwP_Dqf|zDuST76bvi`LM=df^&C8V?NQwbs(DZNh+Z4bp3K$2gfO@|$b23*JV zr#E_miv*skxA!q){G1$(wi1$4P}}E(ENkG|h;4>b8MiocpNbWA+I`$An&v>XEtH%9 z(>4O{^*vtL+|WhS+WpM9Xs-8q>YSWq4$~gKTH|v=8B1ewt?Qf-0-n0*JgPA4=IM+I z>-PwV_d~T(p@}CIplJFh!BaMqnGHsJucuCmVrid4U;Cej7-z_ZYTRd)04Tf573l~N z^}L!=5joLTg6O?axZF^w0yygb$I_dWwkF(OkKln2OLC#W@aMJ6xR9)UMxyq?331~3 z;XrP6qnhX`Dy+ALybwi`3REOXc;2FddE6ZDdF#GJEi{r@R-X}wwa+djM_y$M>Ye+z zg~GZW(isi$H2{|yulL}QNy-h>)(p)W1_#wm;BeD{|M`Uu|XJpGdJMWXMdQE5g zN~(!Aha89!l?s;B8{|9_>)Jd|vXZ0f5ua(n-tBqJ{eg&EnPCLa{ZYMkA61>EFnu`< z&o_k}kfKS2NY!fu&*-|aJmH5B+fmH02i}O7`>|&T>m!im`rIDh0cz0rJQirc>#FPt z>5L$1^1?^V1Vr(qf(5PrnhNGSvcEimG}-T3W}fEvej+EfMsWB#ig|%6{;4*n_OTj_ z8j`8vxuDT`Y{qpDvWqUh1)qE4`FSSQq040U_}U$;7Yg8wNk~HVpQFt9VT5Im3=6fE z{_0+4%v!NoHjwr>4)77B&fdq+a7KS5+{ASj|qg-B`xHl?|iJu)oRTKby@obyCEHR{l1^w$VGj3RsStp`2iCRm4wK6=7ZXg%D zc@;BH_v>j7C&s!xY>TF~YFf)d(oLkV+L`AFCreF$=SM$Tzz!WcQWHd}efvJ=5M|1V zkhY}rsQTAeA=Vc|^7RQw1#3My(GQkJ-wKkZI6SXZdTTRiLlrY_B8Zy$8eNsdDPE=IN$05o>$c+r$8#XiYYaIqP0pa99Vk z=JT4<8+|ouGM1+;6wGSSq6z8js;PIU?L^&*u43!fMNV7M^e#cvABE~WLMlj+Bq4g2 z(%FxerR@gB`E!{5k4kU4j8&7ZCx~uYoo-<*Mq_7xsRerV;w&ULspyQpO#7Tm{3@P* z{L_W(%P$Xk0u@ht_8eeWUvobTra0F!u;g0y=3ARR$BidA(HlDtFni?=Dw3-yJ%t=e zpyKK6Bh0uS+hbFJsKIDvjGN2!zwPs;$!KyzwPZarTTk*HHz`rfu|gl{_g%1n&pS{l ziP3n@3s}L@yZlIBNFi5!?;ciJ`GqG?iKw#jbDqwUfe7b>^P~a~^vNfcZ1Q*JF|+4% zra!TTAPR*`0u@bw=q-Zix@F0wGr)7sOs4;Re`I%yr{!Cj*?WffxJgS6=LatY3(3?$ z$aS!*ARXvMKLCR4hNIcUOK)XgeDRehScwSm!HE)0XQ+9SO21P zrL%vA9090kas%}`71qC48QY0aFpr^{=f!(OVe7m za+u(3#B1EDOf4|9x5+=ACH(^0Ed=Jf)9y*xiBMQ0okepZ%=5$=s>c!ly%K3F!g0BJ zP&)hldjwG^ToR~QdXt9u-;ciRVT`1-^qf@sRB4| zz{tIfpJDwfJe?Wi=P`ZF0k4Ziax+!Sw)&X1REe#wf#UCgi3AI24v=lwqkisZ`cegm zzIXM#?2}JZOK0k`hq^qGj6VK&AG`FjIouu9>-2~}yf~HVk8Ni98wAmt6vVd@kc8?L zN@qVMh)%q~Nn53}nf`obWZ(&kB1Kj{0dAY2oQe}70{y|@T-81 zCIoEqckWCpodKdwUB8{O^L+a0em3cfxt?o_t8UXMfK(H`5vmnnN=W2H*DR%i`3|Q4 zr7}8fvGnA2ehr@M@>Oz|;($lNM1lbE8mNI8EPFcB06~E0TNFUlA8K$D5oWb_e!SQ7 z{X_(K#*UlC>{K?uW1~LO*lM*~q{F6G!i55{hdkxQ!g`!IZ zDw+UNB;cf|{xXZR^|?Y$?2W*XcZi9`f{mC%c?{F&MNLmMf@Sj05@Z}8h&$2cb5l-d z$p{5AY993(QdVcGi5{WC`n6DWsX(bxL5id&wlT9~Hk?Pw8OrPSkoPsM5k4xIZ*NwZ zaW}r+K`$yioeuC(HUWZoO*G|Bo?6tP`=#Bx_p|dan90wjoIogUQ0Z?H0e$8&zowJbuK(=Q0 z=u8Lr(gDc-d7ya05dY#dmOUZ~HP85O+~hfz?`l7V>A&6RK%`0qNtFr_zPE%%TWvBm z&l6X2RsNtBXxB$e9H2fu=*@?71rWrSJ*K6;?BN!i2k`iswxS8?3=lm+PV^5-XD@|n zr2-X6fJXj%A*HPzzRxfxBMHzE&FVaevk@C0K8YB_9uRut*SQ1;N_W`<+P(V#yL|E; zo?~ZR-6)+swu2xFMV1?^NLsmvMqAf;kDFadfT}dBT?uC+_FRwzsHnIu00a#fJcDiC z@}UQeL=|n>Bhxa@o5%E32bli%kRuhKXp#Vtdl^6UE_-BIay{&5f&g)Q3Tk%up7h2; zxdtem+;{coYjl2ApHgz5Ri%(zZ0d#LBhjwC>bHLEpJSTN3l zssyMT{z%*x4nWx*g-OMFdLk8N`e_d-V+6tT6v4A56k94((X@t~=)3q+RWY`LWK7N| z%-P!7wjXCBA%KEyJJ12dUm46kK>X>6f2Fo1BbMMqnM`NKn0bl8lZf09y>OHnKfw0b zY^SrDd7w%y&=Pai$q8^K~;>B1-1ziB#q1(;hWK+8Q>K=_{z_c`+1O zDj><~FO<%vFK1?xY&wwyXy`6YYu3qOgU?1sZ2}5AUdXduE)Mb>;QrM`UlH5xf+8Kh4m``V5odciB(A2a` zMoT4yG^uC^hI-6GT&=$U-`k+c^ecJ4aK&Mm&I8G^DR5 znZc0{W&@yfo}T!4*FHAk;@N2}djKLhQL^dGD4kmiPduq0E!@t`){~jpZVJ=qZ}h?y zO>T&ur*t-Ld4>yXxuLAz5-=gyh`F6Z7k`|!iD3`FKGP{Iou?=G^27vZc_Q6qk3^sL z;NtTk}U?LfSPBiWQmpTAtW+IV4J(1#29a}QgRrPe2J>os>A!Q7q(bn&&VE%I`T!1N_ z7GN7{gte_M)0zIzdy#>QC4jV=hWOuJlA*~)Y^ongHBgsnU?M?)+N08LtXbU$n;BYA zP3P$eq^&Vyf9W|UBv1u*#OXBY4hKj&5Cgb5nKWZX50_%@Q zn=uE3^c8asNH!X#o!W@LHZuZe-|ZJb=`2qG9;B^65*y&<(;mB1+^8>?J&aOHTaOYv z&xE2&1xf1e%{0)jTUH zFi*!2Ad+9D08jTco}M7r((fgRR#kglEmrD$>JT$7Tjayv>OcWKf(q!aGr)piA|Zfe zA>Bj^v@SO7a{0I5Q?7$fKJ`Mj@Zr_$Xc8YT1!1U;N1)Z?B_ruX$)>Xuf4WQqNQ|W5NPvHXiFeR#K9Cp@)8^S!WLAEF@4s z%Z3-BSfXK@*3t}~EB_vR$^b#9wV256y?;f*pHPOOI?`6Gf;mwo^R&lNa-K!otJvv) z=c$mR6>;PS>JBQHJ0?-{#1d*SK02cz{?pao)ag#2Pab5(H_3TUNMJ52t`KWJ1C5Wk zJ4>*TPysC)6-&+VAld1LJ?u6=0D?|xHl8i{{TlZ5*GD~pa|=Utb)F|()jsVJeTWZu zR(x2+PDR@IV<@^LSZ)ENyJ)E1HO^=&6?L9YPPE1Ab~0`L@d&}Q*xwPDP4!Qp=K^A& zIi3@Am`J=)u4|5wSTob?dA?InrC$p{NM{fJdR0^>0z8>|dLrJ_9*edSJorst9`Z_s zNY%ZRw$6$%&y%j&Okw)GP2SYGoZ$HerL9Kid*73qOwz5oVbE6n}V; zAi9g3=&5SQ@s@tcj7t~$2@jJo)&m1JQ|vnk2EanX=?hIvC^k8nzP2<1CGxWpeE|r9 z6D_55CY|Wh2+I?hlDh1%;sYv}S5i=(3?(iJ(%suL506`&kj|(k`Xd$0mn`xzZAppr zWfnb**i-p~PpgmnOnjs!>!8y#vugz%-1nz6P!plB{%Gf(sLKV zvQT`f5Z%3lnP+A&ZADY7E0}Q({jxRmqhJn`NMFN_YG&cZJoYKnKe8d`@!g4}Len0R zkqu_ePM^RAl+5sDw3U?TeD<(g*@;UJG5z-;M^7XmfF!@(`w=q>r#R_FJ$|N@k#jnu zFC)+&pT^Nn#2ySJRsYB)hV$IQS{io0U(}vNJ#qb$Q8Jt9zpkV@A`~tOQ=*!)(Saz! zIqIK~zD6*^>UJAqu4#<{P*THpwV9#evgJ$=ar3u~ZhCp4$8ZK*WFXtidx#>{goKZ<8}!$Ck|L;4RJi`r8y^b}ug zs|PM*44X^NBjAZ86(W4^o;~!n+WRvVB2@rsHk@dh=X&a%r27;6gNV;hoGuy@~dYe!> zyL36hR_%2%RVql(%uNnN>T$C!#A+0??7nYN47-R}BBs9AK5BD~$WAz2!<>P6)_JBq z;*hwooH>y(jMCOTg6B7(aH$YQ(hU^Y)(P%mh7(O(#`K4dcpXeig~_d1TXLMvM2zf` z!=i9*o2ijkv<5=Op6P-@`r64V=<_Q+4W0{tkhc2FBe&ZzsyCS8bsju3rm zLtnd^fq^gNWK>4M*XQn~V1~k_LKI1}@F^JyI*%$qbkP$8VRd3D(yawm<6lt{$MDwRJfp@ zQ^DLOPR$cfjVYa7Of}K`!(L}o)1=gWUovCtqD*WCizD%*X>h79GSx#Ojb$;NksIh!)-e74qh5F->3SNfcZf3DN>;qErgZk;(fDce zfg=RZVm>Y4IZj4}SitRugaU!KS0h%!eXwAf@xnP;lc@}gZl`Ekuswb4Y6W}WfypV; znW4_!EHwgo*{ax11kI$h)xzg(s3@$*FCk~E_NGax`2M658Mm&~8@&Pa2mGHgKN7uMYj^m|ei)!9pBP}7MHMA4k+XB%h)l%Wmqm~2EU zz4x#;UEY0=8Rsv~1w72Dd(NgId(kt9jffHU`s6HisZFLb>|R4o#iJlS%)o%ZVRwJl zAtEQ@=}dJZI8UbFk%9|eLh0;*>e}DgCU58hzW-5Ij?)7HCYc~Mzfj7 zwOuT$*$CYpv^_UYbRjcOpXB|1Hq>B@4^7D^GDI#KsT zYq&7XXre$nwPs`nhynw*>`V4(Hq}mL0y$^kgz7>5eou}TyBbyr{bLItswc77GI*Du$MX5e`g?2IL(2F_bGqU#oFe^0PbCuU8U%!}s$P|J|}04M!hRUv_u;l=rP1ZPjb%QJZuk+!*E}u#k5q z-8kiItvl)>%kFx+X%9Il+$djQhe;O7qX?cs2Q91fUFb9Po%lt>mQ?g9`u3QE$KB*) zBW6SK>1QpRg3s;&8#e707np(KR~$EzwbAhm5(mfG#{<`~i(fPC(=HS#tA{9-vHpm@ zM4zH>kD0U;tpOsrqY+yvQScQC8wN@Q+Y4R9OgIbzwp{$$!`jE~?t=p*zM`s|plcM@&Vjj+W4a~Bv%;5Q7lQBREz z_XEYI-RhgB)$7luUGkM<>wLr}tiE2RH<_lKUj+Pe*n_{a?4s3luip~j^b~!7S_gfC zzCjjn=bm}G!X6&<1^OiKI&qr2Ho|-cMi;Pb>O{MXQv*1TWLXVL zEW67sc)HRE3>L1$M{bZz3AqMJ0wb;k*MFx*P_GQ{OLNLO8)d*=6! zK0sd_x3x~PO}Y_=q_Aofir5H+$A=1?-^!ZQ){E4K>ZD7}V7K2`cK>%NFozwO;7kaj z3RK3Ra=VKQ80j>CX2@Y&Bd(R)=9{>7+ym~#xhL*8h2mau&$xH=fgGOa;Yp%J14%d% zuaSDd>M=sWZ!oE^8E84l40LC2N?e0 z1%ZLPtze&5a7}b=SI{-~6W1!!6kHWGj&vLe4uqLIouu@NfDa{fu6-9j`S5eO`Co+jB7;>oyz{$F?kMkT@3y#^p2;ns(w^am~1P6vwz1 z+*2N$EHnuc3QCMfq$?p15+XvQ;AFX>vsG7e!-Sby41cj! zgx`1sv4iG}<^)toDbgYMG=WL&>n90I8Y!AC(0*8mJ| z;d}TQUW3=-JrWcg3&+HjTmr#|;2M!6e~#DU zJ$SDK#SKdym}9)j;Hq%B1sL2?f9{6lxP|5a0i~k?=_~m;Qvd(}07*qoM6N<$f~5@n AtpET3 diff --git a/apps/multiplatform/common/src/androidMain/res/drawable/icon_round_common.png b/apps/multiplatform/common/src/androidMain/res/drawable/icon_round_common.png deleted file mode 100644 index 755904ee8efc18f9be8c9f70d773701e08948db7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11666 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 diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 0bf3f23d2c..494f400fbc 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -171,6 +171,7 @@ class AppPreferences { }, decode = { json.decodeFromString(MapSerializer(String.serializer(), ThemeOverrides.serializer()), it) }, settingsThemes) + val profileImageCornerRadius = mkFloatPreference(SHARED_PREFS_PROFILE_IMAGE_CORNER_RADIUS, 22.5f) val whatsNewVersion = mkStrPreference(SHARED_PREFS_WHATS_NEW_VERSION, null) val lastMigratedVersionCode = mkIntPreference(SHARED_PREFS_LAST_MIGRATED_VERSION_CODE, 0) @@ -201,6 +202,12 @@ class AppPreferences { set = fun(value) = settings.putLong(prefName, value) ) + private fun mkFloatPreference(prefName: String, default: Float) = + SharedPreference( + get = fun() = settings.getFloat(prefName, default), + set = fun(value) = settings.putFloat(prefName, value) + ) + private fun mkTimeoutPreference(prefName: String, default: Long, proxyDefault: Long): SharedPreference { val d = if (networkUseSocksProxy.get()) proxyDefault else default return SharedPreference( @@ -331,6 +338,7 @@ class AppPreferences { private const val SHARED_PREFS_CURRENT_THEME = "CurrentTheme" private const val SHARED_PREFS_SYSTEM_DARK_THEME = "SystemDarkTheme" private const val SHARED_PREFS_THEMES = "Themes" + private const val SHARED_PREFS_PROFILE_IMAGE_CORNER_RADIUS = "ProfileImageCornerRadius" private const val SHARED_PREFS_WHATS_NEW_VERSION = "WhatsNewVersion" private const val SHARED_PREFS_LAST_MIGRATED_VERSION_CODE = "LastMigratedVersionCode" private const val SHARED_PREFS_CUSTOM_DISAPPEARING_MESSAGE_TIME = "CustomDisappearingMessageTime" diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index 21a9cfa7b4..ff5364adc2 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -1010,13 +1010,7 @@ fun BoxWithConstraintsScope.ChatItemsList( swipeableModifier, horizontalArrangement = Arrangement.spacedBy(4.dp) ) { - Box( - Modifier - .clip(CircleShape) - .clickable { - showMemberInfo(chat.chatInfo.groupInfo, member) - } - ) { + Box(Modifier.clickable { showMemberInfo(chat.chatInfo.groupInfo, member) }) { MemberImage(member) } ChatItemViewShortHand(cItem, range) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt index 6813bec550..72764f215e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt @@ -3,22 +3,24 @@ package chat.simplex.common.views.helpers import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.* import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.* import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.InspectableValue +import androidx.compose.ui.unit.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.dp import chat.simplex.common.model.ChatInfo +import chat.simplex.common.platform.appPreferences import chat.simplex.common.platform.base64ToBitmap -import chat.simplex.common.ui.theme.NoteFolderIconColor -import chat.simplex.common.ui.theme.SimpleXTheme +import chat.simplex.common.ui.theme.* import chat.simplex.res.MR import dev.icerock.moko.resources.ImageResource @@ -79,12 +81,32 @@ fun ProfileImage( imageBitmap, stringResource(MR.strings.image_descr_profile_image), contentScale = ContentScale.Crop, - modifier = Modifier.size(size).padding(size / 12).clip(CircleShape) + modifier = Modifier.size(size).padding(size / 12).clip(ProfileIconShape()) ) } } } +@Composable +fun ProfileImage(size: Dp, image: ImageResource) { + Image( + painterResource(image), + stringResource(MR.strings.image_descr_profile_image), + contentScale = ContentScale.Crop, + modifier = Modifier.size(size).padding(size / 12).clip(ProfileIconShape()) + ) +} + +@Composable +fun ProfileIconShape(): Shape { + val percent = remember { appPreferences.profileImageCornerRadius.state } + return when { + percent.value <= 0 -> RectangleShape + percent.value >= 50 -> CircleShape + else -> RoundedCornerShape(PercentCornerSize(percent.value)) + } +} + /** [AccountCircleFilled] has its inner padding which leads to visible border if there is background underneath. * This is workaround * */ @@ -109,11 +131,30 @@ fun ProfileImageForActiveCall( imageBitmap, stringResource(MR.strings.image_descr_profile_image), contentScale = ContentScale.Crop, - modifier = Modifier.size(size).clip(CircleShape) + modifier = Modifier.size(size).clip(ProfileIconShape()) ) } } +/** (c) [androidx.compose.foundation.shape.CornerSize] */ +private data class PercentCornerSize( + private val percent: Float +) : CornerSize, InspectableValue { + init { + if (percent < 0 || percent > 100) { + throw IllegalArgumentException("The percent should be in the range of [0, 100]") + } + } + + override fun toPx(shapeSize: Size, density: Density) = + shapeSize.minDimension * (percent / 100f) + + override fun toString(): String = "CornerSize(size = $percent%)" + + override val valueOverride: String + get() = "$percent%" +} + @Preview @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt index 0ea2d25c4f..43c492a732 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt @@ -539,6 +539,11 @@ private val versionDescriptions: List = listOf( titleId = MR.strings.v5_7_call_sounds, descrId = MR.strings.v5_7_call_sounds_descr ), + FeatureDescription( + icon = MR.images.ic_account_box, + titleId = MR.strings.v5_7_shape_profile_images, + descrId = MR.strings.v5_7_shape_profile_images_descr + ), FeatureDescription( icon = MR.images.ic_wifi_tethering, titleId = MR.strings.v5_7_network, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt index c55888d8a3..78e24e5e7e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt @@ -5,14 +5,16 @@ import SectionItemView import SectionItemViewSpaceBetween import SectionSpacer import SectionView -import androidx.compose.foundation.* +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.material.MaterialTheme.colors import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.* +import androidx.compose.ui.layout.ContentScale import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp @@ -24,7 +26,6 @@ import chat.simplex.common.platform.* import chat.simplex.res.MR import com.godaddy.android.colorpicker.* import kotlinx.serialization.encodeToString -import java.io.File import java.net.URI import java.util.* import kotlin.collections.ArrayList @@ -33,6 +34,37 @@ import kotlin.collections.ArrayList expect fun AppearanceView(m: ChatModel, showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit)) object AppearanceScope { + @Composable + fun ProfileImageSection() { + SectionView(stringResource(MR.strings.settings_section_title_profile_images).uppercase(), padding = PaddingValues(horizontal = DEFAULT_PADDING)) { + val image = remember { chatModel.currentUser }.value?.image + Row(Modifier.padding(top = 10.dp), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically) { + val size = 60 + Box(Modifier.offset(x = -(size / 12).dp)) { + if (!image.isNullOrEmpty()) { + ProfileImage(size.dp, image, MR.images.ic_simplex_light, color = Color.Unspecified) + } else { + ProfileImage(size.dp, if (isInDarkTheme()) MR.images.ic_simplex_light else MR.images.ic_simplex_dark) + } + } + Spacer(Modifier.width(DEFAULT_PADDING_HALF - (size / 12).dp)) + Slider( + remember { appPreferences.profileImageCornerRadius.state }.value, + valueRange = 0f..50f, + steps = 20, + onValueChange = { + val diff = it % 2.5f + appPreferences.profileImageCornerRadius.set(it + (if (diff >= 1.25f) -diff + 2.5f else -diff)) + }, + colors = SliderDefaults.colors( + activeTickColor = Color.Transparent, + inactiveTickColor = Color.Transparent, + ) + ) + } + } + } + @Composable fun ThemesSection( systemDarkTheme: SharedPreference, @@ -41,7 +73,7 @@ object AppearanceScope { ) { val currentTheme by CurrentColors.collectAsState() SectionView(stringResource(MR.strings.settings_section_title_themes)) { - val darkTheme = chat.simplex.common.ui.theme.isSystemInDarkTheme() + val darkTheme = isSystemInDarkTheme() val state = remember { derivedStateOf { currentTheme.name } } ThemeSelector(state) { ThemeManager.applyTheme(it, darkTheme) diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index f3a5c138d5..6ca14aace2 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1033,6 +1033,7 @@ LANGUAGE APP ICON THEMES + Profile images MESSAGES AND FILES CALLS Network connection @@ -1770,6 +1771,8 @@ Message source remains private. In-call sounds When connecting audio and video calls. + Shape profile images + Square, circle, or anything in between. Network management More reliable network connection. Lithuanian UI diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_box.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_box.svg new file mode 100644 index 0000000000..9680161c4f --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_box.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_dark@4x.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_dark@4x.png new file mode 100644 index 0000000000000000000000000000000000000000..45fc44af4319b8e495f2b3908b37ec1762b12465 GIT binary patch literal 10121 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 KvChIL<^KaA7^!yv literal 0 HcmV?d00001 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_light@4x.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_light@4x.png new file mode 100644 index 0000000000000000000000000000000000000000..c372e25b769d776fd33a7053027ece4f58a231b9 GIT binary patch literal 10325 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Литовский интерфейс Источник сообщения остаётся конфиденциальным. Во время соединения аудио и видео звонков. + Форма картинок профилей + Квадрат, круг и все, что между ними. Будет включено в прямых разговорах! \ No newline at end of file diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt index 5ffc68be79..4e4846bc9f 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt @@ -62,6 +62,9 @@ fun AppearanceScope.AppearanceLayout( } } } + SectionDividerSpaced(maxTopPadding = true) + ProfileImageSection() + SectionDividerSpaced(maxTopPadding = true) ThemesSection(systemDarkTheme, showSettingsModal, editColor) SectionBottomSpacer()