From 5c4f7ce8c7845256f2f91945842f2c5a59db8f6d Mon Sep 17 00:00:00 2001 From: Zhiyuan Zheng Date: Mon, 18 Jan 2021 00:23:40 +0100 Subject: [PATCH] Added store review --- assets/icon.png | Bin 33585 -> 33077 bytes assets/splash.png | Bin 70428 -> 70265 bytes package.json | 1 + src/components/Button.tsx | 4 +- src/components/GracefullyImage.tsx | 97 +++++++++--------- src/components/Menu/Row.tsx | 42 ++++---- src/components/Timelines/Timeline.tsx | 8 +- src/components/Timelines/Timeline/Header.tsx | 4 + .../Timelines/Timeline/Shared/Attachment.tsx | 11 +- .../Timeline/Shared/Attachment/Audio.tsx | 25 ++++- .../Timeline/Shared/Attachment/Image.tsx | 19 ++-- .../Shared/Attachment/Unsupported.tsx | 13 ++- .../Timeline/Shared/Attachment/Video.tsx | 27 +++-- .../Timeline/Shared/Attachment/aspectRatio.ts | 25 +++++ src/i18n/zh-Hans/screens/meSettings.ts | 5 +- src/screens/Me/Settings.tsx | 48 +++++++-- src/screens/Shared/Compose.tsx | 4 + src/store.ts | 8 ++ src/utils/slices/contextsSlice.ts | 64 ++++++++++++ yarn.lock | 5 + 20 files changed, 302 insertions(+), 108 deletions(-) create mode 100644 src/components/Timelines/Timeline/Shared/Attachment/aspectRatio.ts create mode 100644 src/utils/slices/contextsSlice.ts diff --git a/assets/icon.png b/assets/icon.png index 093d16a705e76fd6f264707c287863428698ef61..ab0e8cbc06269cd00275eabeacb7be0a54be73b3 100644 GIT binary patch literal 33077 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 literal 33585 zcmeIbcU)6j8!kvyFd!%xkd8D3Lb1@Bpol0=^ilV&;1Wz7e|Ixgk%G*}^mfez<0)chg)&g@6~lCLqB8phY}|vXOQVlO+CTpMc1cz>#rfC~0$zLmS43Y)Y0U`8 z*&^(-3)NJZco*a`Sya_+|uK}pr2(pj= zXFO7yor1a9xhLlI8HWf9_98W=TLB{DA%Rzpqmgc>WLbp=FCDRF`{; zQTq4w%LKpvJ(;6P9<3y>x+9xBG=n3@`5WqvLePIL#ZfT-lK}r&lcS9DC)Xe4?tkH< zBY<%T?T(<@f1}wWfN=ycj%u9$c*IehJc^S?}JoVrU?`-!VY(JmMF7bvo&@-+%X{f0r5!r&O)vvIVVEMZDAk*=dk>TXh35~ z4dVs*$9$}bxD4Yx$>pp|Iy}h#JAgisV+Flu?^tonzi3>t1nyYEU}Rl-_`ff&vBwg& z9sj8LpL_%jCT9)CNHJ?V8v1a1juzy|LjL5V|Btzhsd;O(v>^8SuxqDE1OL|cTo#od zi-+aKIp!{T9@R*CpY6_=lh%d5>iXQr1FCy-wjKJobmV@=qu6_dxaoPda+@`-spRK2 zYi41$+gcXOM@R)Nr>fw&sW(`?U4?@t58B=fo60Lc{w~XLj`PnVYViekU}J37tT&&w z_w$YD2G2JKgq}L2)PDywG@9I!fWp7ypL-pak8-hPAU6H)`P+?oZdN)#e}t}uHAP8^ z-i{DK?5<~_C{a88!&T3yWawGkN6;oH79aemkWEkeQVosT^S)dQK|IZ(V9Bp9CcF4$ z*nZ6p4fky_zKpy(dJns`B~d#1W}&3UStSd_CeJ8E$d(s#OxIQDV$KAKu*bqbs*74M zl6J{6=H6E!ALRJff9a0&v|SV>-P9w`)=%TcY-t% zE$%cU^>S;QftOAtcZBWf`wI8cGV)IddiFI+sG#HO@gL;`iLB%35cQM%v2f>>%w95T zOZj_EnrZ=2xSE>8rpL`!aL>Ir`jXx`($$DtbtE`eQ;PCKdG$5T3t1(#4;Q%%eYPf| zDi%u?%WIj#ewr>Pl1To_R+v(=C9}4IWPx>f6$CB~nSfwRtxN|wmFpTJDe=T`U(n^fyLQ#}#!GQBE;bn)yQD2iF z=?yaQh`LkyM71OWZKp`Po+9a;Txd5av0yKHS2EippbY`iGTxS_C_~<3B3`G7G?P>* zry^Zc#TH9fC9=lV?zf*2aE^M|Lk?!_+3UGjRxQ$Rt2uhx*FNG2l0NzrR%jqT!PDBr zJ-@rkF-T&eNHGhnvmGs1Z!x}orxg0$rHnJ~Ki}M_`q>atZIu+&^H>^XL-%8;N@U1= zd?~-63{koq;PA_9R<62H*qaorucQ{XElTtIjTFqnmn3+x3&XrdX8R4k>0K>SXsVI_ zOm&XL=U`{pPg7N#YxkFhEbNj+i|yd{kK$Oo#`A*}!GqKL^TYdyUxnj=c6UENTxW}g zdsH$wCnM>fzG(=zj;pwqirF71mTtV_QE(@)Q3crInE!Tt;{AKo1&Sk8FhPoXW;esa zu~&S^+|OEcr)5<}yca!<-J5NUXvTOb3KO|v;m5)Su|i^v+=_Q#&op&m&vGMW-`cEg zo!%GtXSki;!-?`ju&Kpiy8=At^SP{w@^J&t}wx&Riwg=%lv z@4!80N~fYSqhN^Pq}a%l7M^1@qTS9migJj{<1(%~SRt+WqO5LtmyJ~m9oQ<@uF4a+ z0uWONmBj<);)q-(o5<@~QC?F8t;;h}_RTOu5N1Xx9o!YB^a+-TG)M4vln-^aL zkGFBGPsM!IKWWX06*_-&ocf!w95LGg)9YZl;oo)*tk-P{yPs>`JnPBCqr*WhYwr|( z_YwJ2l$+5N8v2LmCrCZH_V0pS^4?Y&uyy^-OCiYV8_nV*-%qy@oaY<<#MKsBIUXd- zBC}c4ioumFJRBOV;LDjj`BBE(V=9DbV;FVd*ebnwxghv9c$gVZ9k88z|JlyVaP%(l zww1<|7i9j*Ba;yh3%er+84lijH9;=Uw-iQnE4Hr~|X&(MM1SpsYkio2iCq@hmkv_~fo~qnDYB2R&%iVP%i8dzRQXly8^(!6Q2x&Jf2E&mPW0?d8v%WKQac$Z$I@!dfmG>wh6Cm1pqueU zoBXyR(lJj$ueEqqO5^R0@T$_ss~)VePcC)I6W;XUy@t(RlS;!RGEO)?M}A{}eV?tZ z0!-)NQ442qx||ncs%-POMz6XB~bVj^}?y({-BEXZf}9bFe=`P0`YxFY7~BRIuvG zpXmZL5fq{tuxe@L;v~58_k2BaDMT#cJs#@wN+Z3dL6kR`oUUCx1$$_MHa^(KnN;j; zzNJ#)UMVv_W`s_qxu(4b1ieCj~x5nUy&<8gOwwXv;jfh4biti7-!o}FkxRj<%UNTT?!5=8 zN$8{-*-swF9({|)KTtka%u3hjjNDDcc9*J;U(`AAEEz-lrK^ddTmI65xm}E$6}GLM zLhlrM7KHayQ4wNv9f?5E&$mm!vJ?+gy(|4a3oQ ztm6J`7? zh=!}f9uc80T3?MOf5#7W%+4FN(HWHx;(;7k$h6Mi)|9sQ9;wXoOSR`|nZ?%G&+_kG z#-1Ba)NSYi&YyKk|%Jooq*mmYWHv zWbh-72YZ_qTygL($`**P$r$8&mA6miGO@t~Wn8C|wLsRnWAuzB*?8o=X(0LXxYq#L z8n2M|_S(|^W`!((Wd%4*gU6*vOEctKy?02Zb1HECXL9yfb>a^f$nuQ9+t)9Aks}&} z8G0?(j;0y!S#R=)y{(idf`9|u;Y2bVuAE*X4RBC&Lu7D@oB%f1%H#RVOp08}6W6_FzNzGq-D;plEje)rk)f+kO7b@W$VRQuE#r$!j*^-q@0RbGIb%pg zbO9$%Wg_uTZUaR3z9hXTTx5{|v5Z>C?&y=py~^Q61Hi|@1QObnW|2axuBs9KfVI3Q z$ZQ(2guAen8&4`7!K6o77EURtvhDXA9PCvbgbx%W3ipV3V!WK8O#P#x%|a&`{`RJ} zGnjWnV$)N;(@Gg|-upuQ=mcO~Z&hPzX~;$|#cbVv#5%~GHGc~K?S{XJ@mCG3#V6`-87}#jg@2uHroK2|dlYvRgiBl@Z8lm~JN-y4ymMR*$*{t)f(ym|- zKIY){!$%Wl*Q&lfrwN;xQYU$KN+}V3j3z?^_yC|ej8(5|1y_Q{?0fp@jI}0FJ&UL9 z-0;0Sh|5^X?;mv$??N5g1NnpH5&oqf!|dw$Anf#Q(Ro)9SwuQ1zL$7tU3E&&gO?~s zYDGzGHaQ+yVu)?~(eX>kZ)zjG^6^v@PWV;6U118Q z*5WFHf53+nT1PYtncVVd|C?PJW@~Oml#qx6BsPEBaY+*71;_6flAa%D^~w&l zN%Pd;OV5_?b!nBZW*l1b%?9@RJjZkgrLF1ZTN!3x-?z0ov{^1%Gi+<rxszF;tKQ>`!^6{tM@4j1jXkoG4#FnFJpy{Jcx2rVY`q?PU>rVij_o87IeCqn zq~Mm{0X`y14Yl2A^8MWf6A-AfCj1TxrSB{7wa`rktkyq#=MizqLe;W*haj001YOGf z6u7dF8vTLb<-6qUd5Q3k;n_q)R^ZS`!W*76&bCwMx3C9L#Zfr&6jtRqv>Gksvx`@J zbS+Y}g%x)Sr#U+hz@*cZ3T=eHF(Mhmy*a#F)LrHE(tLm803?Ig5m-uWcHzUv{sidj zz+d54mdVgMCk!7?ghq+pvzZvSU;hRkYPSHLW``>c@Ig_F$`ZM_RgJbxd-l-fd*qHn$mBwhs+fIP}(D*Vy|Z zN2`(sY<|$pI&NqH6nbTzA5;))pC&g}ISx7f(njle8b)JT+vf{1IkK08glz2s z;8J-aJIT5(2t8i;DUoF3nu(8C!*4C{WftC#pPPQTQaDt&@HU!!>9z6hC*98)tXXhH z6}>G2>p17J7U0G#Q|(Qk;EM56hD0Q(00Ac}_Y{&Ga(6^jCs5|sV$};=^HKPbRRA&)#`A+#$CB^ZyQ&UiMWkbXIz)#z5^pR zG5p15ZIZ*E;jNCy6S)Fcj8%fdUZ=qHJCZSs5qUv1m8?`mQfqxUA@uer)czJ0lLEJn zXX(9WZF28j^|3p!YO%M4@$k1wA=gizmk0az;xg=_HX6ibenaO5t`vcaxrYt~gO5fB z7k%7t^+}HR{CVm^ckE`nQbre12c8oqshICC`6A>H6k$3Dik{q-_AdFTACusjIKf=r zJdje2B_#?s_IdnX+Vc@i=g#11?%VIF1Ep5J&2n2h{-oFS7u@VO3%{%L_yx4q$~@|@ zXXDzSezd*MiEVpcEKW{M&kORaRyB?U$?aHsMmNv)`ZMDe$)V-I?61cdDSSrY{`BLo zmM45l0CCStrGd~=HJl*<$iDQy(LEuN0`MYVYrtDHl4O>yd=Ja8%x-+S80htl-H+l? zTUY>m{I%1hSDI-|kMNBU@jEb;St|Pli47}e7Yfyc%{N{0i{^Gx9Gl)h6kTl2wE@;a z4iw8A>baHa`ngqDoRPt5`nu|7^kykfdhu-Px+-$jR=AwrqNM=vGU8HeZ3>~7WH@hp z#>0D9ArE`-RW0Hl3;z*JYQv_U2}Ua_qI=v(I!1M%CbfL6QMd14r7n<}5sH5M$Caj= z=q>z3rwl>`iPd3SznHK>#fGVv_ATs;Ew=5mtsV^hg=D4t9D*m z7ND9tX_Hm9v2^@W8Qr-5@}$@6m}BbQDhMqugM&hA6W2-bIh)E8v6)s;82F$5TA<_ni_sC*dV-F z=uk4B&xIMrZFb2U+h)k#M65-h!?u;^pRj=N{(}IL6%a$d@x^>vZU4To`LI=^={m8)pH-q~#ki-++5(JQ zmZwS`N*Xdu|FVyt$4D27rlM^r^8t-$YdXiB9XXygb`}J|h`XVa!q#yGr74)9(mN7J zM8Z3S4OehEFxzc$+N-`q;>Od`Al$bKnGX8BbJ>OJ%uVXMEGh8f=gLb$*fxWXE_nx| z3(OhtJKw{wrFd4;zd3ISUHk#rJuA9@MChwwP>j#vvjfo+S>RlbpidH2OEgQNrGSS4A% zbKlh2aImtMG(6_-GlmqtcgMZ*HmH4HW?{Qz@w522N9f-xlWDKUT?UEEkQ1}PbLI0_ zDgt@hxWR6Vm{lXmq&R}-Q16S3M%Id*TplLhAJ!2z&)P~I!y9hOW$6@2XyrJh(dXj4 zw4J;%J!5s#44It=3(6*O%OpQIK_2`aEi6c!_oy!6V39_m_L(QOfA#a${kmeT%@i}o zGTqIq>&LrccgA$%V-{~<>qDwF>(DfX%$QN?$gdsFe(&`))kdrpmvl%NAzWhwv2A7AuWqDbXaTW6(gEmOrArPvQAKi@bRKFlTMu5Kl*=b< z5ARwLxp}pqT%7TrRqr>{er(vX6KhZqNeNbcaI(jV)Bzuf1CUQ=s+Jj=kL82eVjV}K5|oD z)JMGD`1e}auV~c^i!WmAcbx-er@Z@B?3oo}1Hj_hHNCoWMi44tENmP>Z^4YwKomW} zggUd6|4O)|L6f=uXDMCrGMLzJ19%jYBoWx~SkQGm++|mMvESZ#j-CkOv!M{3;*P%3 zqsL+Jtm0sAv9GR2Nkpb z4~YZ=`ywtV2=wE_X!ZPedJG)ycCg<>Iqa?DSn=E4Rh2glgkzD@(v;S5Zn?BA>aYtB z8W_lba)A<7SLS-i%gQ=Nhsc|puYH9rS|XPqAm8plyQJhVSr;>x@!P5GmUUs)ap7gj zaF2H7DZK;1gb+SHu0vM%h7Qs4YBWyYA}akp149#r&PZ&{Uf6hwY4f8^=2;y>r&{#X z9mosL052Ho1bn^dtx*bWuzXnh8#yDek&h=dFP|m1{nEgF_WC8McdrGCE%C&d0g%dg zQIaX}6+UWgo3U!QJj&iq<`yDPT(U=zO%1Gr)GBW(1xe~II@KyVMKj445Q$kcW?d2} zf6=RBB*CB00ziLlHJjK_@ z1N{cX1I4$?VrXAdBYYK|Na<7SBw4_ArbWe?#ZR#~gzjL!=k#Z*I1e+z7!QA@Ytf|H zbOBc)CRrR7b{>v;6|1qG0rS(kXckpV4k`r^{d%t-R!L^e!&P4=SQc*?t-Qr3u=ILk zg@nHAP$a;&)t(`zhcg2#QZXXtwI9iT3WB{s1zvxjT&c)tM;pB}FvVTGohT^j!!**Z zYh1QQd`awF-P!Tx^?VSyF)E^id0zl(Fw4VIrNb3(WWp7vaG!I#fP?XM-tuDdy(v#7=2j}#xCbw_?dDxr?2V7~rTM^Mz| zG-!0mhip%B|D&{PyN@0aTsya?af7*gjKbf?s;Hh0GuxZ=ut|8^Hpu?@z^3xTatfw> z{vgg`s$ADOC@T|5Uu@w8S_YfIJ_ZfM-^$Gs0XsL-1BJA8OhF5|ASgv0muu;8;%0U( zwXJS}%M)G(0CXrY3lgfstQOBG#z{P{LPk7ZuR z0F(qGvuM=>__6POXKy1YhVlYWb;~ncliK?(9wZk)YK*>X+YYMPS-L%T>CzWJiIF3s9_aNy$0?v>P za8iNQ&CraAXwL<5hsTWuRr3YIMtw}$6ihfqFsgACqI~Co#q*bjXR>wNqm^hLEtqu3 z`a^lIt$+i%?N4d*oS=Bbz9gfbz6xr+dhGijSUygPMpl*@WK9O3soo7 zI-Pgfykuf%u{$c8S@NzQqKJe{s-FK3g?7-{OLYgZ_|xed4?uG#tDT&B8eqFvl%&P! zWbF|<2Ty|+bY6)ApVeYmHu@}L9KVv%Zo7{kX(HqxHEZi7qTb<3TD74m)3{aAg(N&z){5)w1K z2b67E409Hd(cs4L#x=`U7}REKfc2Yv*kh4nF%wZws7m%~uA zzY0!X)W(&9kVp-XWWD4hr%#J5RT9%6=SRY}fk9s>-Cxh5!WpCXMvgJpDmgJbNju%; z8iKlab=5i`!Y`}fyNJ5vUGza$+GXQ)MA845wdpwlbzV&XvbUe#PBqlqrB4KKUD9h5 zW=sY#&Y_wCVvi1Kp)ot46_~CWcKv026>+)jc(;7#S+XdU-(E$V7t4=3u;yEOgy_p4 z=5~Aw(LSxm29e{aued~SC=>l=Eb&{b#=B#5)!-fmu&a?gfB7p((9D$g;wTpx0L^bp zXVz2<_j*iJ{{gHOd3jws!aD8(@#<-%oA;W2_2u@j->-VNR;)L71!vg#m?Kx z>=T*7BPuTzk#a^qA_EyajTzS9dWIEWdAy3!9Bm)GE!eo%sGsl_dPi3*Znk zwxIel2~iOt2V|o;?pdwda>dqUM0KdH(OH3t-IXOj*6k=Lb1UPfGuuo0c*I%a3Duo+#vNz@xrBRVVKue19Mv&SWoX|`Rx_+#@Ak=!L){PR zxUm|oe#CVNYqtV01^OI9CkU}ZC!~_hx!S;Z$9`NX2CKYrGq65yJSx)poj3RAUMqq1 z$qS0z<}xya()*L00dn0${kFL(HYj{hP8ufF?aA^K=nFu-{kyUA*ftd(!+5v&pYNGK zdB)pf-EdGS1-e^j<{0+lL98k2j8DsFak}r=*17&IL2gDX@I6iaMz8hBKHli|mJa3k(Nyrk7?LqQ+ zjnTx=uVse@BmqJO;d2kGz6&Q<@|Uy5W+&7XDH^{GT%3TqVNQ?6OGZG1`#h%qL%h_2 zperOi$F$xzK2Rd{A#1CS+M0RFosnC{+jsPwYR{xa-j6j+!=RlRY+nF5$kWlrPo#I! zFkD=XSGM1}dI>^(CWbEt)_%(Xv8Gtp&NAnZ;u|ZUezTekKDz^ij~&yRhNSb5YgKF3uZj zs{?3t*KSq&${S>|a(<*!x4d`}eC92wGw5erpJDKJ;$>;P3sQ+MMSYS=s7J}DFQYPL zSx%wb4=Wy4%HH=rKWG+#+=E@lTP8dL`Hd@Ny*>^;D=KO#N$Q-2!GzxZEypDX>Ep_S z$3V4{ViNX9)d|3a0vD4HS+lbHt;RbK% zRk9k~PK?(|gGpkj4nvJ&27>}*@)^edNK5Zm{Mp>-NE?&$aW-pl4CMj<4#oQ34j;H% zI{DG2%Kz*oYju&@Dk7*egKu#wr%@h4!6FJPk}IE+(^QF8Y&B;u*D(riH{WK_fPLWn zGA7g|Ut8&`rWpGi`98+~ZPpvZ_|{?4iMQq5zWuHt)|9K=xGml z4(|+Ye%WodC!9&+s)-Mhk$@s5wyFCkr*+)Ty~~q8AMvw+H;wLmBK%W=jVo@tTUTqx z9C~;jF4?m4E2^ODcg#%FpEJ9GJL0*6_nZOyqqRYR7V%w4GG_ov$%>;g+ruKiNtDH( zP(}E^YHc`6{!Ry$*?u?PLaY3)-zUPhE7}Lg!}fz3vjE|}1R&)m)pU~vtS0E;>#XJI z%T^u9^%vz>h*%Hs_0`aPrJl~P15$-phutrg^gxjIOLsVf`Ah5w!{C+eJ1~xF;>!fq zO0%FZa2hDz^r~;qN8aD~)%UxjDoLl?mih?T@e&}hMc-|IC?HMrNQtW(USa~OzFX1) zIN~n(%n$R@0@#rQ%#fQ(w8cB*@3~Itx8Dj>Ccf7oL%d@@!(4}#a4nc5H3E_eUqF8E z{KlL)T3bS5$lv$C;Ybt>HG_gI34G)2QWg5(R;pf7K) zatZ755vq4b0f%V@X4snwtS7>8HYLedTlX$D`&;8lHwc(D8t*&fLH}~|3%l>NEV%DI z+OFg9ytoXu?UH^6Pcr6BXA)d7zhPO@dbBUSSkWzD|Cjyw zaX!i?A6Fozw&${@XVM4Ieub29KT0aAbn=Hh<}kS}5`3k*6M};LD_^PtD*D7$n=VzW zO3rKPj7VQg0~#}BygJa5{7m_yC83YLj+BUDJ1OeC0AIi}q%grsIQp z66`-FlBef&D6^N#J{zVGRN-x2bij7&LMQojR8ipZ<@jd9K24()ChO#Yt z4C7_(KH-*X4Glm8GGj_qvZOo_ z>{d2+cN8k#^}N@+HT9jx=d@q}NwIH90qdX-=vMO!kwDiK!-bnxD=Abo-rfJUtN~(p zZgDN#pi9iaGim!Pl@Imj+aEfHNa4j_An%L{vVm}&Ua}mEN&WCp6cEUay2R`l(#!gI zv0UwD!XT5+mVTP)s+u=uqM60#fa zSQBhydWg-M1;TkxnK-ttX;why_1?%cD&M`0enF{?Uei_?y>Ge@sRgwuk&N>o%18*3 z<2MQ_n3WG~2YR@z;xM(5%#V6aMuD{9=J~yGfB2`f-FLAo-j8WW(; zKF=}i=?encahW1Y8OknvB){lP$WCf zmS|vGRAB(LfT|pPRwI@I-AXye{S#P!fZ`dql>u~(2m92<1#=?q0Jpez@+xYh&(;z~&?{~=Vgi3zywJ>k9tVs?D#9E-WQtuXbMUeS<=Epw=t_*A>p+<&Po+w`{icf zC>LD_(oz64ZpC+Mo73U&q&uyU*|h+1YQAfL%omkc!(chYZI&;IKnk-SDI1B-T7eD7 zYJE4$7QIbAn1$W67*)_=817wqr>Q#QMcWS*ML#89`V7{GafRE%pPXh zh|Scr%oEFl9-3u)6M`u6gPn>4#ulm7CP?<3z@W&7V>Z4>D;qc!n&oB2hqKVAChY=x z->XBKK&G1R!w)Ed9H77u3H$|Ix*SZ!zH0-xHN&?y-SU-C$0p(W%R(+5nsrI}wX9FZ zY$*HPUsr4eI=nrN!b@)sxa@3SdxpP=#y1e83BK0da) zHP65lmMN(Ri)mgsWa1(AVztgk#wkuRH=i{TzTFrM^t2hx7ActhFY)kg7sh5Ft@XsY z1PqnvcUo8yTz-cJA|Vk7+EX@1FXSzc`#l*oQW`z`b?#E-p} zMAeH*G5nl|1jq+#Y6q9Uu^R~Mcy0FL{h##mFZ-fjtKIbKY%HkQn~$2*`7TJR@8!x8 zB^V2zyyd@JfTZu^PFhUHBwA=9_y?1}a~Q^NCe1OF$rf<8bP!m|@1=-S$?h(-I4CiG zlzDA69`VMuc;+)yrJu~%p&zEU0A&>=q{T5_u4PppcUT?Qggby*&Jl3Leo*F)l3ixr zODnAvmG<{MhcnonSFjEJ(2Uzbn(+ot;5J!{4Bl(L+JOMzCoY_>+Xsvc4N#42@{f`Y&+6VAt9covD7X9V zZEt}8CXdR;uE+6Z__aNt2QFQ;=tKJ>kQ=|AU0{s3tOufIf zeG5VvQ_?gbS6v*t!P%1^`;q$DOLd1{)O!RvCBRQy1QRNQAi7ka3lro&fnya$vr0`1L+i7Zt;y> z5^yf6wTOo}k0^;CRK4#zMnDpGRViI$5mb>wybD|2s0I7rEpFv;z36Vd4Z-EY_%R;B z8aKv=9MnLU%1{$@ihm1^g3%7!i~>4*#!G7waF2AUK3lbHrQ?j6b>Z0a{3&PVUc_)N0VHyv#$3+pQXQnfgHC|h{fs{b%Cf%f{p~roeOthHu$P;= zyhh|t?=Dp|U2M#&YCN}c2DIcSbsm(F1Kd!`G+6S)W^Jh1S%#y)#+CAkuba(o`eF=V ze<`!7*6dE<0sX)vvxKI~GZW7+y0J?e0Mdo@?z{sEwmFPKO-VD2IlLN+aX$di_r{CG zRqEk^<(E9s^cxR%ugdKA`0U5H%a#k+fzo2O^yLFDj)piC&>T!X^qDrchkL^xvV$~jMaidy|%2YdH3pB-LTg2aS- zEbV2`W6FGZpz$;~&=~%H{f%i0D8_z$Guc*UCR)xl8n^KqB)f(Nz(kX{Qs?ko&}IG+ zhO$wTJlpNa%=Rk;$n2t_troZZduPJh;OI^@*)qhfoRfz~_Hw|9%GWA;_la947zS?< zz$1n{SiL~Xk^gm3X5|~lx~gry4xmpG>yx4~zI^A+FpRl=cmPS6+A+XLKCC22INZjy zm0((CDwMfsz_}3vB&&sAmMJ5{g`&&~yOz1?KKM&SH2TpzZoIHN^>Pg&m zG@;NpW?>-D1PYdu;HZj*|43IPi9HA#O8}+FBn8*V|2Yh$q*{5!!}&s*>sN6@VBuQD z*F6}$V!SuVAwu4PM_j@HZ8&7f*-t|5|Iew<^YY*gr>qtvzIA1R^($6=D1F=quoTG_ z=W_FmMj~BW$d{Wf2L2xP`*_ANU??3GVXn5vaF;k%rDP@rYYVi{CZMTj*O$tlM2^N+ zAAn;f5$}Hh9{bh@rv@#^53H94qWfm+MA>rrvh+JAaD(Z)N%@=!B(vB3BPLh>V|egu$CV`03(j zuYgR#wvK?EI4bY+rPJ31t!HNW(^S##B>f*se0crmw5vK6cuOj#^Q>&Q&6+T1qeq9I zbkXN40|2!eu-r2NBj1&G&b7--iMNvL8a*}xKzjGw@ao^QvT|j>nC8~)=WJ7q;ysVa z8Mt+6&iw#qjjE?WkcMZqb<9#jYJn=yg3+zl0-b|DTcr02+&Gco%*wnLwBpF}tHW!b zMSq`UKo}=ZXd{AWHT_c`3CsL3qF8cZL@LPz4lT4$b_uh(jG^$EUoYJqb6m`-Nvr_?hbSSa=a zVQUp=nQ6^mQ{*{ZoM|L5N1T>E%X={2V{-TVg&v)?0DX*1plqtqu`hZ?{a)M!tQHeV zg7D#diD?}JWaOGi{FG-H1|tZ#3%`!NmECR+@}(Vqcu`}ahu?Fc&}r1IV&^VYZb643 z*bi^#4&Cm9BzvNb>mp(BG|L{q-UC|?o?Hue=<`0&^x+au4eo5wUlYqy1HZoGe5d}^ zonl2$Qk&k;5~}abF|EdxZ(x_cgqNj1ZKv!rM|TZb8mrakN|TCyqZ8Fl}_=8RBIM0ZgM~QV4F{02c1Y- z>Z+I6PRIK@OWZjR9T!}D3=Z2ngcI7>%&1{z@j{V%MUVj-n^)bao z2$9Lmogd<_qVXERpoV(%j8Evw;pcnFiGuwv(fB_89=!1i!Ah?U?2~(Un$a1bm5`X{ zppoVI)wKMZCL1P+e&T{4@1fN=fOmPWDsN5aL$01sTB4}813?#Vwdh|oM2brdqoZeZ z4TYJUzp;xyKX>f#ZKuH7R@Gci;HHO&*;c*rpv>ag#i90efq9ruz6qll05$P_k4ZL6)=JrD(`89(b=>tqo1BEO1DO0pPfA6 z$NWf7&-{Z~2ePpH@5ixI&;WDu=a`Ya0AUEuvhHHzU2u-23d)s`yimw<jOR# z9l#kc{qE(ggl5^+dhkCzj2`#a!2EAG^!_BfU<3xaTx81deg_;yI?1{_a=f}LMU(OU z;JZDt(g}nEIcPVzyDzxJ^taBm{54$5B4AQsJeI?F#EL9d`k4*)|Xm0H- zqGXxe2AoFG$5|{LxjwV-W&=&GtIs$%_EO<9U0u$7=sxG=z*WW7;iuXDaZnBr7m3A*Vjn$aLO?3WjAOTv3tWeS6I)l7Dbnp3I-3-0! zUhv;-gK|)(VR|3Crro#)j&f2gdf-Z`fb@h>$LR5d2lo}&UyC~p7BS+cW+pU3^RFbG zR)&K&;^Y38s%Da6SfDaG&m-f4pglNhO0_dzVC+6PXEbHHcSkh=dzfXdp{!24qN(}Q z2jmR(RvG0-VZh3zB0XkPMge$UUq%yu9}_6~bs9RA0(rQt90!B%-xcHpEBLJS(FJG* z&xR%S1Mv{Y0Z>40Cq*IPufF)_e2+B(O))>H#w?w@l0|Nlfz=7sJR9+M3~De&{4Lj) z&=~Rkm##;9LkCz_TV-Vp-A6H_;Pka%M{GoF0jS}Ze&EVQegR)%FSki%JX{9?G?Xvh zcnr3oZE)ME(cmBhm6Y`E@WGz(R4Z4w;b|7{wf0kiO$VbOzWnY|jh@MJzy4c+56Zd- zRNLQE*wmI$z_Khf#{j4D8XtPB(vfOYk$vfBh?*~`Nm4s0-d{9R256MAibhRJ_|>U? z?^!6cgYu~)8w4abqt*&QQUN)CeZFVA&fkARLH*qmh|X0IEj?DLPH9Y~#kOziG9Do6 z3vrTPWAJa$_z#~`1_6aiFVgoQWa%kgY3yoC?DFvg{K+_<5j8|e&#gZWeBJ;UUEdat z;JoBPz%>+b-G>ZBIcK3Rw=XygAvpjrJG+dw6<}cl(yjIrAnDUo%1(rRvDFLI7}f6b zBBkhn5FotG_f7Wynlf8(D0uGl4)Oa!p!MB>SEK<#85Pq@Y$Bw-BFDx&VUTJE>fJ@j z=4c23TDt|Oz#7EdOisi79M8BDhoai^01XUsoAeyTsX;stnXk7DuP)Z($o`W)sM(g% zp~XeqIZ!5MTc<$E{@udgFQ(-yCBq(~e^MVh$v=M`3s{(ZR(11{4ko%|aU z{y`Yf`P78yt8;%->OYt70+oU5|1X9J3(xGok5_$PCs6)FiG*d%TaB0RIwfv*GH7a5xer=T-Fh1bwsZn zk(NjN>Je-G@4Rr-3pi?995sXf-`ThNxRdjgfPm=P&1+Y+j@oTUox%U-I)nEZL>07X Unh~D}z<)Qdt6s~LzxVY203AIk;s5{u diff --git a/assets/splash.png b/assets/splash.png index fdffaaccd9f46a00bba1d1faec1dec743e2e748b..bd2004e819508d40980c7618286b1758d1f5c805 100644 GIT binary patch literal 70265 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 EA8p(5U;qFB literal 70428 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 Ca5vNd diff --git a/package.json b/package.json index e1b52115..4c3ae5b6 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "expo-secure-store": "~9.3.0", "expo-splash-screen": "~0.8.1", "expo-status-bar": "~1.0.3", + "expo-store-review": "~2.3.0", "expo-video-thumbnails": "~4.4.0", "expo-web-browser": "~8.6.0", "gl-react": "^4.0.1", diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 3b32350d..c0ed634b 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -122,7 +122,7 @@ const Button: React.FC = ({ style={{ opacity: loading ? 0 : 1 }} size={StyleConstants.Font.Size[size] * (size === 'L' ? 1.25 : 1)} /> - {loading && loadingSpinkit} + {loading ? loadingSpinkit : null} ) case 'text': @@ -141,7 +141,7 @@ const Button: React.FC = ({ children={content} testID='text' /> - {loading && loadingSpinkit} + {loading ? loadingSpinkit : null} ) } diff --git a/src/components/GracefullyImage.tsx b/src/components/GracefullyImage.tsx index 09c5d10d..bf4ab449 100644 --- a/src/components/GracefullyImage.tsx +++ b/src/components/GracefullyImage.tsx @@ -14,24 +14,55 @@ import { Image as ImageCache } from 'react-native-expo-image-cache' import { useTheme } from '@utils/styles/ThemeManager' type CancelPromise = ((reason?: Error) => void) | undefined -type ImageSize = { width: number; height: number } interface ImageSizeOperation { - start: () => Promise + start: () => Promise cancel: CancelPromise } -const getImageSize = (uri: string): ImageSizeOperation => { +const getImageSize = ({ + preview, + original, + remote +}: { + preview?: string + original: string + remote?: string +}): ImageSizeOperation => { let cancel: CancelPromise - const start = (): Promise => - new Promise<{ width: number; height: number }>((resolve, reject) => { + const start = (): Promise => + new Promise((resolve, reject) => { cancel = reject Image.getSize( - uri, - (width, height) => { + preview || '', + () => { cancel = undefined - resolve({ width, height }) + resolve(preview!) }, - error => { - reject(error) + () => { + cancel = reject + Image.getSize( + original, + () => { + cancel = undefined + resolve(original) + }, + () => { + cancel = reject + if (!remote) { + reject() + } else { + Image.getSize( + remote, + () => { + cancel = undefined + resolve(remote) + }, + error => { + reject(error) + } + ) + } + } + ) } ) }) @@ -61,51 +92,22 @@ const GracefullyImage: React.FC = ({ const { mode, theme } = useTheme() const [imageVisible, setImageVisible] = useState() - const [imageLoadingFailed, setImageLoadingFailed] = useState(false) + useEffect(() => { + let mounted = true let cancel: CancelPromise const sideEffect = async (): Promise => { try { - if (uri.preview) { - const tryPreview = getImageSize(uri.preview) - cancel = tryPreview.cancel - const res = await tryPreview.start() - if (res) { - setImageVisible(uri.preview) - return - } + const prefetchImage = getImageSize(uri as { original: string }) + cancel = prefetchImage.cancel + const res = await prefetchImage.start() + if (mounted) { + setImageVisible(res) } + return } catch (error) { if (__DEV__) console.warn('Image preview', error) } - - try { - const tryOriginal = getImageSize(uri.original!) - cancel = tryOriginal.cancel - const res = await tryOriginal.start() - if (res) { - setImageVisible(uri.original!) - return - } - } catch (error) { - if (__DEV__) console.warn('Image original', error) - } - - try { - if (uri.remote) { - const tryRemote = getImageSize(uri.remote) - cancel = tryRemote.cancel - const res = await tryRemote.start() - if (res) { - setImageVisible(uri.remote) - return - } - } - } catch (error) { - if (__DEV__) console.warn('Image remote', error) - } - - setImageLoadingFailed(true) } if (uri.original) { @@ -113,6 +115,7 @@ const GracefullyImage: React.FC = ({ } return () => { + mounted = false if (cancel) { cancel() } diff --git a/src/components/Menu/Row.tsx b/src/components/Menu/Row.tsx index 6327addc..cdcc4c8e 100644 --- a/src/components/Menu/Row.tsx +++ b/src/components/Menu/Row.tsx @@ -13,7 +13,7 @@ export interface Props { title: string description?: string - content?: string + content?: string | React.ReactNode switchValue?: boolean switchDisabled?: boolean @@ -90,26 +90,28 @@ const MenuRow: React.FC = ({ - {(content && content.length) || - switchValue !== undefined || - iconBack ? ( + {content || switchValue !== undefined || iconBack ? ( - {content && content.length ? ( - <> - - {content} - - {loading && !iconBack && loadingSpinkit} - + {content ? ( + typeof content === 'string' ? ( + <> + + {content} + + {loading && !iconBack && loadingSpinkit} + + ) : ( + content + ) ) : null} {switchValue !== undefined ? ( = ({ ) }, []) + const publicRemoteNotice = useSelector(getPublicRemoteNotice).hidden + useScrollToTop(flRef) return ( @@ -231,7 +234,8 @@ const Timeline: React.FC = ({ {...(!disableRefresh && { refreshControl })} ItemSeparatorComponent={ItemSeparatorComponent} {...(queryKey && - queryKey[1].page === 'RemotePublic' && { ListHeaderComponent })} + queryKey[1].page === 'RemotePublic' && + !publicRemoteNotice && { ListHeaderComponent })} {...(toot && isSuccess && { onScrollToIndexFailed })} maintainVisibleContentPosition={{ minIndexForVisible: 0, diff --git a/src/components/Timelines/Timeline/Header.tsx b/src/components/Timelines/Timeline/Header.tsx index 7489c29c..f9d2453d 100644 --- a/src/components/Timelines/Timeline/Header.tsx +++ b/src/components/Timelines/Timeline/Header.tsx @@ -2,11 +2,14 @@ import { useNavigation } from '@react-navigation/native' import Icon from '@root/components/Icon' import { StyleConstants } from '@root/utils/styles/constants' import { useTheme } from '@root/utils/styles/ThemeManager' +import { updatePublicRemoteNotice } from '@utils/slices/contextsSlice' import React from 'react' import { StyleSheet, Text, View } from 'react-native' +import { useDispatch } from 'react-redux' const TimelineHeader = React.memo( () => { + const dispatch = useDispatch() const navigation = useNavigation() const { theme } = useTheme() @@ -17,6 +20,7 @@ const TimelineHeader = React.memo( { + dispatch(updatePublicRemoteNotice(1)) navigation.navigate('Screen-Me', { screen: 'Screen-Me-Root', params: { navigateAway: 'Screen-Me-Settings-UpdateRemote' } diff --git a/src/components/Timelines/Timeline/Shared/Attachment.tsx b/src/components/Timelines/Timeline/Shared/Attachment.tsx index e78b647a..ed5ba625 100644 --- a/src/components/Timelines/Timeline/Shared/Attachment.tsx +++ b/src/components/Timelines/Timeline/Shared/Attachment.tsx @@ -57,9 +57,10 @@ const TimelineAttachment: React.FC = ({ status }) => { return ( ) @@ -67,6 +68,8 @@ const TimelineAttachment: React.FC = ({ status }) => { return ( @@ -75,6 +78,8 @@ const TimelineAttachment: React.FC = ({ status }) => { return ( @@ -83,6 +88,8 @@ const TimelineAttachment: React.FC = ({ status }) => { return ( @@ -91,6 +98,8 @@ const TimelineAttachment: React.FC = ({ status }) => { return ( diff --git a/src/components/Timelines/Timeline/Shared/Attachment/Audio.tsx b/src/components/Timelines/Timeline/Shared/Attachment/Audio.tsx index 9f7b2a43..cbaa0bde 100644 --- a/src/components/Timelines/Timeline/Shared/Attachment/Audio.tsx +++ b/src/components/Timelines/Timeline/Shared/Attachment/Audio.tsx @@ -1,4 +1,5 @@ import Button from '@components/Button' +import GracefullyImage from '@components/GracefullyImage' import { Slider } from '@sharcoux/slider' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' @@ -7,14 +8,21 @@ import { Surface } from 'gl-react-expo' import { Blurhash } from 'gl-react-blurhash' import React, { useCallback, useState } from 'react' import { StyleSheet, View } from 'react-native' -import GracefullyImage from '@components/GracefullyImage' +import attachmentAspectRatio from './aspectRatio' export interface Props { + total: number + index: number sensitiveShown: boolean audio: Mastodon.AttachmentAudio } -const AttachmentAudio: React.FC = ({ sensitiveShown, audio }) => { +const AttachmentAudio: React.FC = ({ + total, + index, + sensitiveShown, + audio +}) => { const { theme } = useTheme() const [audioPlayer, setAudioPlayer] = useState() @@ -39,9 +47,17 @@ const AttachmentAudio: React.FC = ({ sensitiveShown, audio }) => { audioPlayer!.pauseAsync() setAudioPlaying(false) }, [audioPlayer]) - console.log(audio) + return ( - + {sensitiveShown ? ( audio.blurhash && ( @@ -116,7 +132,6 @@ const styles = StyleSheet.create({ base: { flex: 1, flexBasis: '50%', - aspectRatio: 16 / 9, padding: StyleConstants.Spacing.XS / 2, flexDirection: 'row' }, diff --git a/src/components/Timelines/Timeline/Shared/Attachment/Image.tsx b/src/components/Timelines/Timeline/Shared/Attachment/Image.tsx index 957d7f97..80d758ef 100644 --- a/src/components/Timelines/Timeline/Shared/Attachment/Image.tsx +++ b/src/components/Timelines/Timeline/Shared/Attachment/Image.tsx @@ -1,22 +1,25 @@ +import GracefullyImage from '@components/GracefullyImage' +import { StyleConstants } from '@utils/styles/constants' import React, { useCallback } from 'react' import { StyleSheet } from 'react-native' -import { StyleConstants } from '@utils/styles/constants' -import GracefullyImage from '@components/GracefullyImage' +import attachmentAspectRatio from './aspectRatio' export interface Props { + total: number + index: number sensitiveShown: boolean image: Mastodon.AttachmentImage - imageIndex: number navigateToImagesViewer: (imageIndex: number) => void } const AttachmentImage: React.FC = ({ + total, + index, sensitiveShown, image, - imageIndex, navigateToImagesViewer }) => { - const onPress = useCallback(() => navigateToImagesViewer(imageIndex), []) + const onPress = useCallback(() => navigateToImagesViewer(index), []) return ( = ({ }} blurhash={image.blurhash} onPress={onPress} - style={styles.base} + style={[ + styles.base, + { aspectRatio: attachmentAspectRatio({ total, index }) } + ]} /> ) } @@ -37,7 +43,6 @@ const styles = StyleSheet.create({ base: { flex: 1, flexBasis: '50%', - aspectRatio: 16 / 9, padding: StyleConstants.Spacing.XS / 2 } }) diff --git a/src/components/Timelines/Timeline/Shared/Attachment/Unsupported.tsx b/src/components/Timelines/Timeline/Shared/Attachment/Unsupported.tsx index da310940..11f5c0ea 100644 --- a/src/components/Timelines/Timeline/Shared/Attachment/Unsupported.tsx +++ b/src/components/Timelines/Timeline/Shared/Attachment/Unsupported.tsx @@ -7,13 +7,18 @@ import { Surface } from 'gl-react-expo' import React from 'react' import { useTranslation } from 'react-i18next' import { StyleSheet, Text, View } from 'react-native' +import attachmentAspectRatio from './aspectRatio' export interface Props { + total: number + index: number sensitiveShown: boolean attachment: Mastodon.AttachmentUnknown } const AttachmentUnsupported: React.FC = ({ + total, + index, sensitiveShown, attachment }) => { @@ -21,7 +26,12 @@ const AttachmentUnsupported: React.FC = ({ const { theme } = useTheme() return ( - + {attachment.blurhash ? ( = ({ sensitiveShown, video }) => { +const AttachmentVideo: React.FC = ({ + total, + index, + sensitiveShown, + video +}) => { const videoPlayer = useRef