M*sPo9`}us^4{TP}SM}DbEuSXOZ7^A0
ztmY##jWb*V(RWGBt2Ha&4*M=^A%9do&BU!U@Tzze$a4>O9t?`ri8${}g$LU2l$KRj
zvr2|#d3t)9++w%HI>ig*XR80~x-wWvw%BmwD457SK8=h=0qCCxFgWXK7jxxkpT#&>
zkpYvHpAdtXxuc3j(;#8;7XG%}tWOM9CVj|g!>z3a8CYGW>R~2$imW~vg+GcpW!Nl)
z*a5qYN$~CMwr#bQ2HN^;CYoQtsxE^H^=4V5_dXfRPltzRQj9CCR)Y3j%x{(Jf%*pr
z$GqCul6!1i+e5h2@C<1OrAvH}-=E%Uo~-xgCf`2BioNGo94oNlDowcoC_czN)UKl_
zY&T)#Obd6fOTBW8;;CtouWh*G)8|?+2foQij+)j(*h-4(DYVHzVh_7kph-WWUwE19
z+RMJ$e)!FDYt>BXZY4uD=JqomhUYr`$Aso3bH`DJE(LLL4RvNU9$23pn9e)TXT`&V
zeWEXS_x|*lbK3)4kP+x-;HGK>@5Y1&o??N|iYlV^1-7K>wZvs{QeM&a=k>`nMDsF<
zbKf_(ZqKmC!?m7iKy?{BFojxdsPX*~)7q=9trCi@m5X-uPT;
zUN(g<(Y~dnrByZOGt-iWaC4J_(K&3jQqXdA37Zu3r)Ojsp5K0BkhErOV6cl3SMsVT
zFRv%`=8Zi)V{{+sc~$z!>ACx}L5^PILNNzljSt^lvl+Ro*^pYj#{y(@iMn~d`8~FH
zP}l1G!|CDFkMM9`LVsj4K_N{76YGfWd#=DJvTv$>-XzsZWa6L
QU{h
zc{%StP<6itwUURANu4egUG9F&{kl6sjL6zwj|}^uxGt&pgduqk+K7sn0h?0xI6xCb
zoIBo>TsHa6=HV0r-fIwA(5uVvGTjun#jhiqKni;9J1*?*>+9>!D=Xs@B*vZL)NCzr
zW`?;TbT0xoCK}F94;^5Y(A|Ulx)Ve}5!RjjWGlHT9{FliOm{gy&iHMK(PYO4Xs9yy;cJw34;8?a#zR{Mf77xXjZ{hHoQVSj&r
z8vq|~F;8Mxku!(7eAh!m55*tX*#LYQGt*|P?9e6QniXRYc0nrip*KzQ-N&La?~~-H
zK0G}Zq%vbW5-8fDr}PxAzZNR}Q7j>rg}TYbsdue=>%P%9k^I#xh^6p)szfReWAywA
zD9WDj!-?oOj}kTt>N>o>LejExYgKWwMB*b@|C*H5yz(pqh1c}rUVrAg)}B!*BV%2D
z(|rN0E|(b62|6A>JqwFrs;1HL^JolNPFSCID83*glhIXKf_A_34sHklVy0Cddy_$V
z?9>s8Ern|62^@>o8trX+DGE8a--~Hg$g~nW>+Y7htj*!?PM5eXl{Km<@7o)xC1k3=
zOv_wxJX`I%QuCh)qFmz
z$(^M9iUD()U}?1M7CZeeR4X;q2U{AXh3{Q~iI0k~yOH>&DQTL15#he^j!gLLg63T5
z>|6h%99+i@|K&n|mM2nN*{)q(k9Dx__l)3d)pQJQ*9#z64+mFi3YIb$5!@3@IIj2r
z%Ss)|z`mEO&0fQKy`K{@)4<-n#nLZ}YC@-#aNGNN^XIfyekN&HdfD_nyW751xHg@7
zS**#(z?w`xE|^@>bXx(ajZTwTD|~<%JGEuHQ5rjr8rC*tS7C1>_3m(v8mfn;>u=@Nx7tcwI|!yVz%zQP>@9OJKPGvns2Dr|DZ`V^X0Muy
zm?~$=r8qUGF*VURK_L4Hy{Ke8;LY!6`?SIBdTYJSjaS{z0^0;YL9Bw-AH0`BB22qzt2&%)4$Kr^`Rz^TCF?L{{!vv87cq(
literal 8631
zcmYkCRZyM5wr>B0OOW91?(Qyu72KWRB)Ge~26rb&aCcj{FWeo11rHD;0Z#Tlw@%%M
z?tba2e(0{Q`HeB7Rh8w?P>4_f06+uF%c%cb3;#2a5dO`vGuEvC7LcpDoD@(CB{>BE
z3IHr4sp(~W;g9TkRrwqa~`MUJoW_sbwaiy
zs(K>S<>{MFB1{ZU*RWI%zNLo5UI;UbYse*^-B2d*zb$YdfE8-trFMO
z?GH-YD;KDD;7(Vr>$WSBc@KxijpN2S8>%2nfXnAj2c7fWx^NCyMecrvh!83S6`&}H
zKybl|Ab~%?Bp|I5!#S}7HaFM*iUubVf+cRI^m)1R^}Lgiv0!=
zcpkhgaZ^3l;4+3L9(Zn0O-NxnV2ECZMVBunVNCU7K!TssJ*Yjce;R1Pob%B3idDdH
zFw)`f5q^J=-7&)n3t4j)rnl{UrVV$ZK@Ohy23#SZ^X(<_5jk!9Wo{gCGY=On;olg@9di1hF95C&&)=
zU)u$D++HW*oSyCPKw<7_2$PMjS}o$YT%>T5)=ZNR|=a9v1ZH@Vi_I|7t*L6_+
zXK)uaJO8ye!-Nh&I{{>ID4L$tXImChHG99~`LMce-&Z=8gQrPO#pMr-DWE%0L@tPK0lnCJcU
z$ylN(CISr@r}_CUsGsjOpV=!ykQt!egfjcX4Ib3YImh1Vw_N_fl7G%g+*1a#`p)Mol3po#+Ya;mR6V>Lds>ZJ`
zjTK-v;7qq>fB6>VgSR_x!JR|sD1fYr3gPEh9WPLo2D|?GNCe0Z?~ms=kw#s@CxQwX
z`w(nE2a(WAQFa;ytrQ#}<~SzyNet5;b!tC6m(eN>P-Ax!In=&Z6)XB0ps;xOGL+PN1pq_2X70{O)&e0vdaFNWy=YobDYV~vE1{3tQ8
zAZB~LSEj(+iA9?n2ATyv$@^mo)xvOecBf$T5+9xM!kFQ3pS%;!?^=S_RA>Hj5=9g}ZNp81T{QZ$;q_rZPw=o3ef$rAm;)Ciq5?#Xk(w
z)B?GE={1)ZtQgpFY3$|;y!4sHr4uu|^hOH`R|aiC`$tOH;y_HYo@2**nFMP^+c{{%
z=|)GtpH8UyvtM`Wk~6HyQe`?S7asZoECV_mSz{&(i$6Dd-te*7%=yx^D^I*JeIX5*
zjO8;&8yvxBEdu&9UFCt
z6QsJxO6GX27UVGP)iT6|_GOI^xaL-lywBHN(XxFNLVG11>V%FTr$qN5Gl(=3TsVe9FFsQ5vq$0|weqrP+z@IM6
z;`^omqj<;1V@xtFT^JnJvP*&_V2>5P=hKEE
z_b4gb=zCDTjn<@*iAZ|1E@rLQsG%q+#FH2=Jw}kP8jBBzmypyy;RSF_?{h17v}tE$
z;$jC|lEdI7kdw-OuanWtwsF7uo8#*2{bDT&djj|Abg}2^E}Met-$?6zY17H*x2JF%
zowI(DpN+z?5o`G7#dtyO2|orK%zQv&4*oRK$?fGN3ExNj+4iNmRImjSeEZNzd2
zu0j~Fzp;nb$ytx%rZm*nKdopeuuOL2x7j9FB2aV1
zSODu9n;v-(J3I#)_52A91&nsIiQ138ASpPa4?m}ZM&88-C$c5c#z)6hGQi0P&b21k
z%u*AR&Pv9%v9P?q7*9NGFHRhl6`WGxa8jTn@^{lPr8H?A41qsravCXNnHp;`OO_5_
zD837I;^0C;SQVipwZFvVb4O@!C?F?Be{Sef;eN$)NU9yRtRToJEnFfF(NW(lDMNbA
z@QUj7?;cegh2M=!V_jek>$CXfB*X72s0~k#x9W7cXqU^?A7NGw@1dnFMYN1&REV`m
z=ui0}RyeHX&)-K419GCSPy~TUQI+?*jSLK~dQQtU!p}S-SJ@&bXy`j^Lg<4IEzCm#
z)&};czl-!q@PoA6r!hiK5lt~tc4Hdza8@FWNLSOs`o>h!*(WX*p%)W`Mnk3i*1yZ(iavEE&znQtGFt0H)icBtD>KM;Kz+obj*
zPDKJKSfxrhY{j5kw`VZ)B>+u3e76~s&eDK`c_w5Ho=+23SM9QqYP4+k<*S%TZxQi^
z@BZ%)F1&YF5i{Ivd)YSNZZ8?aUklZhw!MUk3TA|y`Syq1JartXJEDT*8o5jXU0d&+Ilbw&M{1KjryAnnVDQz
zGWY8#X38iOXw7-;Zo{sJo*lXuwh;p-bov5}-PGUQ6{Z&p5|ALTspaVpNGzxIifTV*
zjfJGnD4G85str163KV6k*yl{HG~9M$WBG|
z>gp^RJ&4(92Nw1X(QVm^*U3o`#iz|J{Dv^5jl2S#=uhJ|B5>465&gS&(+MkNY
z6W=q!#2`zjt10ozAZ8}yk6RwTy`JXp-zFeZWJsq_OY%&6q{IX4(O4UE>^L}F?{Rzl
zNx(Gs;<}Yic#=(J4A{HM=~+EnP+{UpA1jp{wLoSg|MhMlkdr5mF
zrSaDA22$-%4e_`EMRxA+1*HDV4*%s@TA}^Dp
zA~_+7zMSDn$9RfiXLH}L#lDRTeNmMSW9w|}Bqcjo#+RS(H@Nfpl$jmxt2{0zscqA`
zjma%0iV1OS?c77=v^vsPO|q4JDw-VseMu3pwi>H~@r)MkhH^u%;VGf^lsldAwqXAj
zh3oXYa(To3T1DeN{2gztp~P$HX0T&HCZgP%=}{(?6z-|KV2c(?PTC4*Z->RbC;Ms972OZ)1u8hpDd&V()gCoK2
zd!xiP#*3ct6m5fE_)j=^%AR}aKMeLwc3kPsMYS(+--${43v;@O)O(Ew@s=W&p@U&Ufe7$p+I
zPa_-=SEK1W2Wgikowoeiv+fZ^C}QXnLo;K0hY&`FiYtWh(1RYEmX76y?#ZHnJaFTT
zdl8@1pJI+uO3ZVI!g$)ZFbYg2wX
z)!KQ_oexS!$rz6^U(#TR)x2U8(Zpg{+GX$jJfyQ!`Q2w#U^Hi3p0uz-}R$Z~&w)N-h6Z$+W*FGZS%`owS
zVwU0#W{nefo+rsch;$PvBSh=$$EU4Ul6e;xpcke-|&@{TIlh
zpcl6qjm{eG=vIdtSiM+up`*GZn3hdmQEzVMZKq4@p-&ct2FP<2JjaLW8ZDTwWU-i7
zYuY5L^cz}(?Y+l|m&yTeA1em06Z5kkRLJ{f=1rG-W#@X$a)?zNFFF5}$eNm{%HJwG
zmzn!X+*5C5xLMezYBP_9PO&c@E&6sI37x7%%+2t6#hB?!zZOOx1(v)Xw!RwrV+1r!
z=h-A2C&`QczLL>F1_FU2L~6&pT)g72ULS4r+M220?<7O1txfzE?LQ{%@0z1Ma#cTb
z8{UtatsTz&t8X3tdd7}w8nc^D!_U3&*jk>sqTIxr^2$rnMuuN6sYmX)i>wlV*#0~j
zE@3>SCx_&j1k;$p_anWQB7b!@{Ndq|s`ZE_e(V6PWWiOlrSkp(2oyXVB8dd%+Wb9|
zNgt+|B^nk)98|25Rz`hayzKllOqalQ*oBW~b5|8ET9a~cxmI|=WJ-~C)!eQ%k8LTp
z&Lc8^itvrCO8Gk6#tlrp;UC`kJcwg%o0(Pj@&S?uQfDqSJ@M*?pVPs_{iS@`e?`St#}pwD-fi6cQwFy0ssS;8$p#
zom%Ycj_@^;=HIrvB?^w3ui^MyXV<@v7-fiJK@41QS#yzBS48*fH+0=`AH@b!1%(AB#OezVUpW@^-<6b9bssgHEqiV*}1<
z>7r1Oyx_sd(>bCDj4Oa2zC8>_@J`&xG3ML-)|=W4Q&=4`jE?G14IK`rT`Ti`mm0Gq
z_ZOf1Nsj)tVaM^OZZ!2coqg+Wf1LcgZb#^N|I=`VI|3=VJ^Hz8)z9*e|Bn=Cn24Yf
z&X(MRtzG}A3o@Z%x1r<@KEI_Yl3d{>bYx>e!`&+jWFEbPvEP3dN64xjT+GA1_l#39
zRyv~_Nln#75XK01AY~luIy+}!9^F7AOFEBPQ=YjL&F
zF`2Om3Nk&chDxp-D;XAnFPkSW3&{@*b?0~c9nTKuDjE1rgZ^gwajHfuzeKnlqE0k;
zBrUz8_yTjcW|3oZ0@^-tPpLJ+D^&M#WyBz_RVI~wZpLx$@p&YFsoMF@5FwmCPO2V>
z?dG13`v7HzfDfADQZDqr?5K
z7@q`uU2M#oY1GB?3mrs+l27WazzXj%0^Exil-^ieX+9k8Q{KS#aSG!v+*Ug)p>xl#
zjz4zkioVWY4yuS>44``w3FVQ=$wwAgmMsk49VoST=XO;OL=QKq=af@#2c?c)8+3*~
zu9a_j1*&|~HxT`rGz}TNb3>Wt+=NqUu0jCVtDGdetv*O6;oz|IcHUI6ihj925n)-w
z2s=vLl~G;}{6MkL8;2T831~EG8H!C?4t;&UU?{|FLUT8I#_F%DzGF_4PiP%IaZw@2?h4&Bb~6pZpcD}P@MY}LXv!?S5aHp
z+ohOd5wv>dzs6Gr8d693swUi6h#&W@8orjqf@^m+@wlM=R~~n?tf$J!)~>2SAAu!i
z&;0(F=NLWdyARYPdT8|4RS|-habS-r)@H&^sRj&%RMrmB*t8+L2&{2bmZxp)E2r{9
z>2Dmzm3dl*^IlIym_1e)>SS~pqsGkub+%2u7N=pG)erqR%)TeR7-wS~)epq3Li*Ve
zw)6o3lWmEt_jxNNf{oCr|Lzg9;zu8#-8Cw^jq^0`G~N6H5g
zCw7~R7u$2@rvk6t&XD3SrK2T3g_=>a+4M}S0h~zq@ti-y$#%Jd
z;|@ROcn9Nkt4XH+6~|4(@#4*1bEGpOW(_E;MHi=A5k<+kM8}ZMBjL=`@vyH2yU;@q
z<}XIWYVHofXyq!Y68n0YKbr}@C{7pV;`I&R|9SboaoO+NmRx>r#
zR@e!NP|p~SDx`Ivs$W8{7rM?jpH{|L=J9r(tqZ>oE_ET>7v;m=t`DkR*VJ%vD!iih
zEcutDvQ_?g(rFF+9?8dM{)kS4n#7QF96!UQK2wE4c*Kw;qjzCZI?30nx75CLq;Cn2
z1BoGT?ueP~*(oP}|BfcTpnZX!DzKrWoh*dt|6Kfg#
z060=V&2i9MqX~^7#xsTquP^)F?8#
zSU!Ah^`d2q3s>{Tq@DXXY}8xC9Odr&^5|87vEdWqG@6(qfR{bBoZj!r!^ZMwZO#qN
z+d}9c&6k}0m@{>hOOb)i`AzGGZrtKK`mard4KRmP`^~EJxRWqK;6F?TRbk_+ZX8i)
zh%cWXKA*%>AvUZ@V9WV<3|3Crw^u((=mM!9o6hvf7qbE}<*4?T(@eEBkoVzPGjP;8
zqM#~NRPuDLv6U3>-wVb0IZusHKlbTZyj1
zk$+O^RD+JgK-(6?X=lMQdWq!T<}4;Cza+{ONqxI1dF~@-kLD;GH2(Ny7b$~BAE&^%
z3r3V9f*UppZE|psVp?0$jwkE_!0FZ`#~BMb!HWU(O#?UFt&dhFbrxn|93A)I`~~Hd
z#5V8;+#s^)>@hunlNK!kTp@FGXa7J?$EgwW@O|!IW~?xvwX}^|U}HBJ8i-SYeX1^S
zPx%#?(ChckO}u)&+DCRFLr=|^C)AP#%bTETBj^wA`ybKsL7gAicwSV}Bg}d}tq9Z;
zORiI
z?8dFMT2=J4A|l_}16eg*G!CCqi^XWoHR5e@4pu!MEl74LHTUm8OwHO%gL
zrxF{fAbaS|uoL3gBC#|UMRzIWwPl(Yduz{y^gU3j(UDmH(UF^jaZ{4({zD%e(yBC3
z0X}rtyq<>&;lHxtfAOstp!e-lGa>q5Vo(7xMwigTtJfAQDiz8hE+-J4`5#O1zXTY;
zIg9C=;r|lg&GzrjqUze;UqPFc^eSQPw-A*e)k`O5_Hip2>3
zcBCokyl31O6lEIdl%RN?Gj4#xJ9C69#K1Yu=D<~kt
z0X`$As#kiRH#d1`ANE=3fRD$n8CO|2>acyVk8w!|lYjkrz(KENsweZ)ytrNFdrVfq
z#4eVaBz^Y>2{6l$#d=xf|Ig9)+ksgD3^vCeOcZg2RFG+PirLZccQ){QMyFM
z$|CbbcvoWUbK`%8rz$gXw1*JS3|JNx>uiv+Ii489W3I6JvXEG>XMcbZBlQ}%sQ+6p
z8bN%ex;aD|#1*yIEFp*?Ssn`t$d(IeASSf-i|)hNlzIGu)O}S
z`=GoBpR{uw3=v(rW!C1~wM_c+T|ob00Cg2y6|wP|1T@DR~ixmmp|PHn0I%<
zC&vLQCvr+Fvl81Y-=@jJj?cO1S_akC>5vH}h1gbs`TJEQwdJPS8q8aQ>yv`toG5?wIGb(Dq(!?
zf1@Zvog+8k(lAQ{q^h11h6#o87h9WZy;B-Uen^CL{3x439N6(BLOSpNB&X};MOxmy66h;9G$!emxmd+C#7
zNB4Ki{bjI?i473*j>a{GdQ>bgH28|Eh!4BM9nOLSF}fkSx^=X>r}si>Me8v+tn_;X
zrzn8oI{Y7pY7KHD2cZHubc0z`Ociu}Nivid7Q5zj0Tz?ErQ~rqSv*fP=%QxNz%}N}
zzH{C&x*u80FI)sRK3}pF8pS&{7-P#L@jHQL8DB5NMXV%e
zDqWjp4jWMl5i%2A-Molj^4r3zmL{aU8GhHql%V56bCH9QKS-5sbEH4JwO!$ZV(5WMJuyUlIrbbiCEv&SfbhjOqDtF4$d^ppVFg
z=uXJ;j4-as-Ee*~;xauZJ*0)&2)v+8m|5lTo0yA62A+#J9`qK5*q%akAg>|6|LaT$
z32@OJ50naUc2~t-cq7_OJkc-oSgufH`foKv=!Ti0%`_MSZ4dx$=3Pp!mt;6)>
z&|og)KaFXXp7T;kyzpOU`Q0gfZr@eBn!)zmDP#Kh2K%C0-^c5{-}A2%0|3h^%hXDl
Gg!~Vt>`To6
From a454a97c58debbd59163675a9b3487df9064360c Mon Sep 17 00:00:00 2001
From: zlzw <583819556@qq.com>
Date: Fri, 13 Sep 2024 10:37:19 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=B8=BB=E5=88=86?=
=?UTF-8?q?=E6=94=AF=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/AndroidManifest.xml | 1 +
common/build.gradle | 1 +
.../manager/game/BilliardsRandomManager.java | 6 +-
.../yunbao/common/utils/ProcessImageUtil.java | 57 +++++++-
.../com/yunbao/common/utils/WordUtil.java | 4 +-
dependencies.gradle | 2 +-
.../live/adapter/LiveReportAdapter.java | 2 +-
.../live/views/LiveNewReadyRyViewHolder.java | 4 +-
.../live/views/LiveNewReadySwViewHolder.java | 4 +-
.../live/views/LiveReadyRyViewHolder.java | 5 +-
.../live/views/LiveReadyViewHolder.java | 4 +-
live/src/main/res/layout/view_live_room.xml | 10 +-
.../main/activity/EditProfileActivity.java | 2 +-
.../main/activity/FeedbackEditActivity.java | 4 +-
.../yunbao/main/activity/MainActivity.java | 7 +
.../main/activity/MyWebViewActivity.java | 2 +-
.../main/activity/OneLoginActivity.java | 2 +-
.../main/dialog/MainStartDialogFragment.java | 22 ++-
.../video/views/VideoPlayViewHolder.java | 132 ++++++++++++------
video/src/main/res/layout/view_video_play.xml | 10 +-
20 files changed, 198 insertions(+), 83 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1bc022949..628ac676e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,6 +54,7 @@
+
diff --git a/common/build.gradle b/common/build.gradle
index 7968f2e9e..27b4ed16b 100644
--- a/common/build.gradle
+++ b/common/build.gradle
@@ -86,6 +86,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
api files('libs/jcc-bate-0.7.3.jar')
compileOnly fileTree(dir: '../libs', include: ['*.aar'])
+ api 'androidx.activity:activity:1.9.1'
api rootProject.ext.dependencies["appcompat-androidx"]
api rootProject.ext.dependencies["recyclerview-androidx"]
api rootProject.ext.dependencies["cardview-androidx"]
diff --git a/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java b/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java
index fe94ccbc9..3e1899941 100644
--- a/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java
+++ b/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java
@@ -145,6 +145,9 @@ public class BilliardsRandomManager extends AbsRandomGameManager {
if (event.getSudMGPMGState().equals(SudMGPMGState.MG_GAME_LOAD_OVER)) {
joinAiRobot();
}
+ if(SudMGPMGState.MG_COMMON_GAME_STATE.equals(event.getSudMGPMGState())){
+ reset();
+ }
if (event.getSudMGPMGState().equals(SudMGPMGState.MG_COMMON_PLAYER_IN)) {
LogUtils.e("收到的回调: AI uid = " + getAiUid() + "| kickUid = " + event.getPlayerIn().kickUID + "|" + getPlayerSize());
if (event.getPlayerIn().reason == 1 && aiInfo != null) {
@@ -185,7 +188,7 @@ public class BilliardsRandomManager extends AbsRandomGameManager {
@Override
public void onGameMGCommonGameBilliardsHitState(SudMGPMGState.MGCommonGameBilliardsHitState model) {
- LogUtils.e("uid:"+model.uid,"state:"+model.state);
+ LogUtils.e("uid:"+model.uid,"state:"+model.state,"isOneOverForMy:"+isOneOverForMy,"isOneOverForOther:"+isOneOverForOther);
if (Integer.parseInt(model.uid) == IMLoginManager.get(AppManager.getInstance().getMainActivity()).getUserInfo().getId()) {
if (isOneOverForMy == -1) {
isOneOverForMy = 1;
@@ -282,6 +285,7 @@ public class BilliardsRandomManager extends AbsRandomGameManager {
}
private void onSendNotOneOver() {
+ ToastUtil.showDebug("标记丢失一杆清台");
LiveNetManager.get(AppManager.getInstance().getMainActivity())
.ballClearanceTableStatus(data.getSudGameRoomId(), new HttpCallback() {
@Override
diff --git a/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java b/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java
index 05f096263..99de44a79 100644
--- a/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java
+++ b/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java
@@ -3,13 +3,20 @@ package com.yunbao.common.utils;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.ImageDecoder;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.PickVisualMediaRequest;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentActivity;
import androidx.core.content.FileProvider;
+import com.blankj.utilcode.util.LogUtils;
import com.yalantis.ucrop.UCrop;
import com.yalantis.ucrop.util.FileUtils;
import com.yunbao.common.CommonAppConfig;
@@ -39,6 +46,7 @@ public class ProcessImageUtil extends ProcessResultUtil {
private ImageResultCallback mResultCallback;
private boolean mNeedCrop;//是否需要裁剪
private boolean mNeedGif;//允许gif图
+ ActivityResultLauncher launcher;
public void setNeedGif(boolean mNeedGif) {
this.mNeedGif = mNeedGif;
@@ -83,7 +91,7 @@ public class ProcessImageUtil extends ProcessResultUtil {
if (mNeedCrop) {
Uri uri = null;
if (Build.VERSION.SDK_INT >= 24) {
- uri = FileProvider.getUriForFile(mContext, mContext.getPackageName()+".fileprovider", mCameraResult);
+ uri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileprovider", mCameraResult);
} else {
uri = Uri.fromFile(mCameraResult);
}
@@ -117,6 +125,19 @@ public class ProcessImageUtil extends ProcessResultUtil {
return;
}
String path = FileUtils.getPath(mContext, intent.getData());
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ ImageDecoder.Source source = ImageDecoder.createSource(mContext.getContentResolver(), intent.getData());
+ try {
+ Bitmap bitmap = ImageDecoder.decodeBitmap(source);
+ path=BitmapUtil.getInstance().saveBitmap(bitmap);
+ bitmap.recycle();
+ } catch (Exception e) {
+ e.printStackTrace();
+ mResultCallback.onFailure();
+ return;
+ }
+
+ }
File file = new File(path);
if (file.exists()) {
mResultCallback.onSuccess(file);
@@ -153,6 +174,19 @@ public class ProcessImageUtil extends ProcessResultUtil {
}
}
};
+ launcher = ((AppCompatActivity) mContext).registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), new androidx.activity.result.ActivityResultCallback() {
+ @Override
+ public void onActivityResult(Uri result) {
+ LogUtils.e("result:" + result);
+ if (result == null) {
+ mAlumbResultCallback.onFailure();
+ return;
+ }
+ Intent intent = new Intent();
+ intent.setData(result);
+ mAlumbResultCallback.onSuccess(intent);
+ }
+ });
}
/**
@@ -173,15 +207,28 @@ public class ProcessImageUtil extends ProcessResultUtil {
/**
* 相册获取图片
*/
- public void getImageByAlumb() {
+ public void getImageByAlbum() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ showSystemPick();
+ return;
+ }
requestPermissions(mAlumbPermissions, mAlumbPermissionCallback);
}
- public void getImageByAlumb(boolean needCrop) {
+ public void getImageByAlbum(boolean needCrop) {
this.mNeedCrop = needCrop;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ showSystemPick();
+ return;
+ }
requestPermissions(mAlumbPermissions, mAlumbPermissionCallback);
}
+ private void showSystemPick() {
+ PickVisualMediaRequest.Builder builder = new PickVisualMediaRequest.Builder()
+ .setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE);
+ launcher.launch(builder.build());
+ }
/**
* 开启摄像头,执行照相
@@ -195,7 +242,7 @@ public class ProcessImageUtil extends ProcessResultUtil {
mCameraResult = getNewFile();
Uri uri = null;
if (Build.VERSION.SDK_INT >= 24) {
- uri = FileProvider.getUriForFile(mContext, mContext.getPackageName()+".fileprovider", mCameraResult);
+ uri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileprovider", mCameraResult);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} else {
uri = Uri.fromFile(mCameraResult);
@@ -255,7 +302,7 @@ public class ProcessImageUtil extends ProcessResultUtil {
startActivityForResult(intent, mCropResultCallback);
} catch (Exception e) {
try {
- Uri resultUri = FileProvider.getUriForFile(mContext, mContext.getPackageName()+".fileprovider", mCorpResult);
+ Uri resultUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileprovider", mCorpResult);
if (resultUri == null || mFragment == null || mContext == null) {
return;
}
diff --git a/common/src/main/java/com/yunbao/common/utils/WordUtil.java b/common/src/main/java/com/yunbao/common/utils/WordUtil.java
index 52f651070..2706d32cd 100644
--- a/common/src/main/java/com/yunbao/common/utils/WordUtil.java
+++ b/common/src/main/java/com/yunbao/common/utils/WordUtil.java
@@ -35,7 +35,9 @@ public class WordUtil {
public static boolean isNewZh() {
return IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE
- || IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.TRADITIONAL_CHINESE ;
+ || IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.TRADITIONAL_CHINESE
+ || IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.CHINESE
+ || IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.CHINA;
}
public static String getNewString(int res) {
diff --git a/dependencies.gradle b/dependencies.gradle
index fd32a5d29..740ce8126 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -22,7 +22,7 @@ ext {
// "tencent-bugly" : 'com.tencent.bugly:crashreport:2.6.6',//腾讯bugly
// "umeng-common" : 'com.umeng.sdk:common:1.5.3',//友盟统计
// "umeng-analytics" : 'com.umeng.sdk:analytics:7.5.3',//友盟统计
- "ucrop" : 'com.github.yalantis:ucrop:2.2.3',//图片裁剪
+ "ucrop" : 'com.github.yalantis:ucrop:2.2.9',//图片裁剪
"smartRefreshLayout" : 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-20',//下拉刷新上拉加载
"magicIndicator" : 'com.github.hackware1993:MagicIndicator:1.6.0',//ViewPager指示器
"banner" : 'com.ms:banner:1.0.0',//轮播图
diff --git a/live/src/main/java/com/yunbao/live/adapter/LiveReportAdapter.java b/live/src/main/java/com/yunbao/live/adapter/LiveReportAdapter.java
index 129445c10..052e063fa 100644
--- a/live/src/main/java/com/yunbao/live/adapter/LiveReportAdapter.java
+++ b/live/src/main/java/com/yunbao/live/adapter/LiveReportAdapter.java
@@ -237,7 +237,7 @@ public class LiveReportAdapter extends RecyclerView.Adapter {
if (tag == R.string.camera) {
mImageUtil.getImageByCamera();
} else {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum();
}
}
});
diff --git a/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java
index efdacdffc..6def839ff 100644
--- a/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java
+++ b/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java
@@ -691,7 +691,7 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl
*/
private void setAvatar() {
if (mLiveSdk == Constants.LIVE_SDK_TX) {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum();
} else {
DialogUitl.showStringArrayDialog(mContext, new Integer[]{
R.string.camera, R.string.alumb}, new DialogUitl.StringArrayDialogCallback() {
@@ -700,7 +700,7 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl
if (tag == R.string.camera) {
mImageUtil.getImageByCamera();
} else {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum();
}
}
});
diff --git a/live/src/main/java/com/yunbao/live/views/LiveNewReadySwViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveNewReadySwViewHolder.java
index 3d949e264..0be3d139a 100644
--- a/live/src/main/java/com/yunbao/live/views/LiveNewReadySwViewHolder.java
+++ b/live/src/main/java/com/yunbao/live/views/LiveNewReadySwViewHolder.java
@@ -673,7 +673,7 @@ public class LiveNewReadySwViewHolder extends AbsViewHolder implements View.OnCl
*/
private void setAvatar() {
if (mLiveSdk == Constants.LIVE_SDK_TX) {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum(true);
} else {
DialogUitl.showStringArrayDialog(mContext, new Integer[]{
R.string.camera, R.string.alumb}, new DialogUitl.StringArrayDialogCallback() {
@@ -682,7 +682,7 @@ public class LiveNewReadySwViewHolder extends AbsViewHolder implements View.OnCl
if (tag == R.string.camera) {
mImageUtil.getImageByCamera();
} else {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum(true);
}
}
});
diff --git a/live/src/main/java/com/yunbao/live/views/LiveReadyRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveReadyRyViewHolder.java
index 8d44d530f..6e26b6276 100644
--- a/live/src/main/java/com/yunbao/live/views/LiveReadyRyViewHolder.java
+++ b/live/src/main/java/com/yunbao/live/views/LiveReadyRyViewHolder.java
@@ -35,7 +35,6 @@ import com.yunbao.live.R;
import com.yunbao.live.activity.LiveActivity;
import com.yunbao.live.activity.LiveChooseClassActivity;
import com.yunbao.live.activity.LiveRyAnchorActivity;
-import com.yunbao.live.activity.LiveRyAnchorActivity;
import com.yunbao.live.adapter.LiveReadyShareAdapter;
import com.yunbao.common.bean.LiveRoomTypeBean;
import com.yunbao.live.dialog.LiveRoomTypeDialogFragment;
@@ -262,7 +261,7 @@ public class LiveReadyRyViewHolder extends AbsViewHolder implements View.OnClick
*/
private void setAvatar() {
if (mLiveSdk == Constants.LIVE_SDK_TX) {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum();
} else {
DialogUitl.showStringArrayDialog(mContext, new Integer[]{
R.string.camera, R.string.alumb}, new DialogUitl.StringArrayDialogCallback() {
@@ -271,7 +270,7 @@ public class LiveReadyRyViewHolder extends AbsViewHolder implements View.OnClick
if (tag == R.string.camera) {
mImageUtil.getImageByCamera();
} else {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum();
}
}
});
diff --git a/live/src/main/java/com/yunbao/live/views/LiveReadyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveReadyViewHolder.java
index a19123a46..6f88ab017 100644
--- a/live/src/main/java/com/yunbao/live/views/LiveReadyViewHolder.java
+++ b/live/src/main/java/com/yunbao/live/views/LiveReadyViewHolder.java
@@ -285,7 +285,7 @@ public class LiveReadyViewHolder extends AbsViewHolder implements View.OnClickLi
*/
private void setAvatar() {
if (mLiveSdk == Constants.LIVE_SDK_TX) {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum();
} else {
DialogUitl.showStringArrayDialog(mContext, new Integer[]{
R.string.camera, R.string.alumb}, new DialogUitl.StringArrayDialogCallback() {
@@ -294,7 +294,7 @@ public class LiveReadyViewHolder extends AbsViewHolder implements View.OnClickLi
if (tag == R.string.camera) {
mImageUtil.getImageByCamera();
} else {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum();
}
}
});
diff --git a/live/src/main/res/layout/view_live_room.xml b/live/src/main/res/layout/view_live_room.xml
index de45e45ae..d6f9621b3 100644
--- a/live/src/main/res/layout/view_live_room.xml
+++ b/live/src/main/res/layout/view_live_room.xml
@@ -2208,11 +2208,6 @@
-
+
diff --git a/main/src/main/java/com/yunbao/main/activity/EditProfileActivity.java b/main/src/main/java/com/yunbao/main/activity/EditProfileActivity.java
index e540e924f..0881d7c37 100644
--- a/main/src/main/java/com/yunbao/main/activity/EditProfileActivity.java
+++ b/main/src/main/java/com/yunbao/main/activity/EditProfileActivity.java
@@ -439,7 +439,7 @@ public class EditProfileActivity extends AbsActivity {
if (tag == R.string.camera) {
mImageUtil.getImageByCamera();
} else if (tag == R.string.alumb) {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum(true);
} else {
RouteUtil.forwardUserAvatarSelect();
}
diff --git a/main/src/main/java/com/yunbao/main/activity/FeedbackEditActivity.java b/main/src/main/java/com/yunbao/main/activity/FeedbackEditActivity.java
index 61a3df228..0e654e3a7 100644
--- a/main/src/main/java/com/yunbao/main/activity/FeedbackEditActivity.java
+++ b/main/src/main/java/com/yunbao/main/activity/FeedbackEditActivity.java
@@ -33,8 +33,6 @@ import com.yunbao.main.R;
import java.io.File;
import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
@Route(path = RouteUtil.PATH_FEEDBACK_EDIT_ACTIVITY)
public class FeedbackEditActivity extends AbsActivity {
@@ -299,7 +297,7 @@ public class FeedbackEditActivity extends AbsActivity {
loadingDialog = DialogUitl.loadingDialog(mContext);
loadingDialog.show();
if (tag == 1) {
- imageUtil.getImageByAlumb(false);
+ imageUtil.getImageByAlbum(false);
} else {
imageUtil.getImageByCamera(false);
}
diff --git a/main/src/main/java/com/yunbao/main/activity/MainActivity.java b/main/src/main/java/com/yunbao/main/activity/MainActivity.java
index 9ecc1d7f4..b002e65f9 100644
--- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java
+++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java
@@ -44,6 +44,7 @@ import androidx.viewpager.widget.ViewPager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.blankj.utilcode.util.LogUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jakewharton.rxbinding3.view.RxView;
@@ -55,6 +56,7 @@ import com.tencent.imsdk.v2.V2TIMManager;
import com.tencent.imsdk.v2.V2TIMSDKConfig;
import com.tencent.imsdk.v2.V2TIMSDKListener;
import com.tencent.imsdk.v2.V2TIMUserFullInfo;
+import com.yunbao.common.CommonAppContext;
import com.yunbao.common.bean.QiniuLog;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.server.DownloadService;
@@ -232,6 +234,11 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
@Override
protected void main() {
+ LogUtils.e("MainActivity",
+ "语言:"+IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage(),
+ "测试文本:"+getString(R.string.hot)
+ );
+ ToastUtil.showDebug("打包时间:"+CommonAppConfig.BUILD_TIME+"\n系统语言:"+IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage());
//初始化声网
SWAuManager.get().initRtcEngine(this);
ActivityCompat.postponeEnterTransition(this);
diff --git a/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java b/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java
index 729e0323d..15e4b55b1 100644
--- a/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java
+++ b/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java
@@ -585,7 +585,7 @@ public class MyWebViewActivity extends AbsActivity {
if (tag == com.yunbao.main.R.string.camera) {
mImageUtil.getImageByCamera();
} else {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum();
}
}
});
diff --git a/main/src/main/java/com/yunbao/main/activity/OneLoginActivity.java b/main/src/main/java/com/yunbao/main/activity/OneLoginActivity.java
index eade89493..c862ccf60 100644
--- a/main/src/main/java/com/yunbao/main/activity/OneLoginActivity.java
+++ b/main/src/main/java/com/yunbao/main/activity/OneLoginActivity.java
@@ -49,7 +49,7 @@ public class OneLoginActivity extends AbsActivity {
if (tag == R.string.camera) {
mImageUtil.getImageByCamera();
} else {
- mImageUtil.getImageByAlumb();
+ mImageUtil.getImageByAlbum();
}
}
});
diff --git a/main/src/main/java/com/yunbao/main/dialog/MainStartDialogFragment.java b/main/src/main/java/com/yunbao/main/dialog/MainStartDialogFragment.java
index 7c8da569f..ef1e11ec5 100644
--- a/main/src/main/java/com/yunbao/main/dialog/MainStartDialogFragment.java
+++ b/main/src/main/java/com/yunbao/main/dialog/MainStartDialogFragment.java
@@ -169,7 +169,12 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O
boolean isAnchor = IMLoginManager.get(mContext).getUserInfo().anchorUserType();
if (isAnchor) {
String[] permissions;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ permissions = new String[]{
+ Manifest.permission.CAMERA,
+ Manifest.permission.RECORD_AUDIO
+ };
+ } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU) {
permissions = new String[]{
Manifest.permission.READ_MEDIA_IMAGES,
Manifest.permission.CAMERA,
@@ -195,7 +200,12 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O
boolean isAnchor = IMLoginManager.get(mContext).getUserInfo().anchorUserType();
if (isAnchor) {
String[] permissions;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ permissions = new String[]{
+ Manifest.permission.CAMERA,
+ Manifest.permission.RECORD_AUDIO
+ };
+ } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU) {
permissions = new String[]{
Manifest.permission.READ_MEDIA_IMAGES,
Manifest.permission.CAMERA,
@@ -234,9 +244,9 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O
JSONObject obj = JSON.parseObject(info[0]);
JSONObject obj1 = JSON.parseObject(info1[0]);
try {
- if(code==201){ //声网
+ if (code == 201) { //声网
LiveSwAnchorActivity.forward(mContext, Constants.LIVE_SDK_SW, JSON.parseObject(obj.getString("android"), LiveKsyConfigBean.class));
- }else if(code==200){//融云
+ } else if (code == 200) {//融云
LiveRyAnchorActivity.forward(mContext, obj.getIntValue("live_sdk"), JSON.parseObject(obj.getString("android"), LiveKsyConfigBean.class));
}
} catch (Exception e) {
@@ -309,7 +319,7 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O
if (i == R.id.btn_close) {
} else if (i == R.id.btn_live) {
if (isWifiProxy(mContext) || checkVPN((ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE))) {
- ToastUtil.show(WordUtil.isNewZh()?"檢測開啓了VPN或者代理,請先關閉VPN或者代理再開播。":
+ ToastUtil.show(WordUtil.isNewZh() ? "檢測開啓了VPN或者代理,請先關閉VPN或者代理再開播。" :
"It is detected that VPN or proxy is turned on. Please turn off VPN or proxy before starting the broadcast.");
} else {
if (mCallback != null) {
@@ -324,6 +334,7 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O
}
}
}
+
private boolean isWifiProxy(Context context) {
final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
String proxyAddress;
@@ -345,6 +356,7 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O
boolean isVpnConn = networkInfo == null ? false : networkInfo.isConnected();
return isVpnConn;
}
+
@Override
public void onDestroy() {
super.onDestroy();
diff --git a/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java b/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java
index 1750df210..b4e4f93b3 100644
--- a/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java
+++ b/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java
@@ -10,11 +10,19 @@ import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.widget.RelativeLayout;
-import com.tencent.rtmp.ITXVodPlayListener;
+import androidx.annotation.Nullable;
+
+import com.blankj.utilcode.util.LogUtils;
+import com.google.android.exoplayer2.C;
+import com.google.android.exoplayer2.DefaultLoadControl;
+import com.google.android.exoplayer2.ExoPlayer;
+import com.google.android.exoplayer2.MediaItem;
+import com.google.android.exoplayer2.PlaybackException;
+import com.google.android.exoplayer2.Player;
+import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
+import com.google.android.exoplayer2.ui.StyledPlayerView;
+import com.google.android.exoplayer2.video.VideoSize;
import com.tencent.rtmp.TXLiveConstants;
-import com.tencent.rtmp.TXVodPlayConfig;
-import com.tencent.rtmp.TXVodPlayer;
-import com.tencent.rtmp.ui.TXCloudVideoView;
import com.yunbao.common.utils.L;
import com.yunbao.common.views.AbsViewHolder;
import com.yunbao.video.R;
@@ -27,11 +35,11 @@ import com.yunbao.video.http.VideoHttpUtil;
* 视频播放器
*/
-public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayListener, View.OnClickListener {
+public class VideoPlayViewHolder extends AbsViewHolder implements View.OnClickListener {
- private TXCloudVideoView mTXCloudVideoView;
+ private StyledPlayerView mTXCloudVideoView;
private View mVideoCover;
- private TXVodPlayer mPlayer;
+ private ExoPlayer mPlayer;
private boolean mPaused;//生命周期暂停
private boolean mClickPaused;//点击暂停
private ActionListener mActionListener;
@@ -41,7 +49,6 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList
private boolean mEndPlay;
private VideoBean mVideoBean;
private String mCachePath;
- private TXVodPlayConfig mTXVodPlayConfig;
public VideoPlayViewHolder(Context context, ViewGroup parentView) {
super(context, parentView);
@@ -55,17 +62,21 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList
@Override
public void init() {
+ DefaultLoadControl control = new DefaultLoadControl.Builder()
+ .setPrioritizeTimeOverSizeThresholds(false)
+ .setBackBuffer(10_000, true)
+ .setBufferDurationsMs(500,
+ 5_000,
+ 150,
+ 200)
+ .build();
+
mCachePath = mContext.getCacheDir().getAbsolutePath();
- mTXCloudVideoView = (TXCloudVideoView) findViewById(R.id.video_view);
- mTXCloudVideoView.setRenderMode(TXLiveConstants.RENDER_MODE_FULL_FILL_SCREEN);
- mPlayer = new TXVodPlayer(mContext);
- mTXVodPlayConfig = new TXVodPlayConfig();
- mTXVodPlayConfig.setMaxCacheItems(15);
- mTXVodPlayConfig.setProgressInterval(200);
- mPlayer.setConfig(mTXVodPlayConfig);
- mPlayer.setAutoPlay(true);
- mPlayer.setVodListener(this);
- mPlayer.setPlayerView(mTXCloudVideoView);
+ mTXCloudVideoView = (StyledPlayerView) findViewById(R.id.placeholderView);
+ mTXCloudVideoView.setKeepContentOnPlayerReset(true);
+ mTXCloudVideoView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIXED_WIDTH);
+ mPlayer = new ExoPlayer.Builder(mContext).setLoadControl(control).build();
+ mPlayer.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
findViewById(R.id.root).setOnClickListener(this);
mVideoCover = findViewById(R.id.video_cover);
mPlayBtn = findViewById(R.id.btn_play);
@@ -76,13 +87,59 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList
PropertyValuesHolder.ofFloat("alpha", 0f, 1f));
mPlayBtnAnimator.setDuration(150);
mPlayBtnAnimator.setInterpolator(new AccelerateInterpolator());
+ mPlayer.addListener(new Player.Listener() {
+ @Override
+ public void onIsPlayingChanged(boolean isPlaying) {
+ Player.Listener.super.onIsPlayingChanged(isPlaying);
+ }
+
+ @Override
+ public void onPlaybackStateChanged(int playbackState) {
+ Player.Listener.super.onPlaybackStateChanged(playbackState);
+ if (playbackState == Player.STATE_READY) {
+ mPlayer.play();
+ onPlayEvent(TXLiveConstants.PLAY_EVT_PLAY_BEGIN, null);
+ } else if (playbackState == Player.STATE_BUFFERING) {
+ onPlayEvent(TXLiveConstants.PLAY_EVT_PLAY_LOADING, null);
+ } else if (playbackState == Player.STATE_ENDED) {
+ onPlayEvent(TXLiveConstants.PLAY_EVT_PLAY_END, null);
+ }
+ }
+
+ @Override
+ public void onVideoSizeChanged(VideoSize videoSize) {
+ Player.Listener.super.onVideoSizeChanged(videoSize);
+ Bundle bundle = new Bundle();
+ bundle.putInt("EVT_PARAM1", videoSize.width);
+ bundle.putInt("EVT_PARAM2", videoSize.height);
+ onPlayEvent(TXLiveConstants.PLAY_EVT_CHANGE_RESOLUTION, bundle);
+ }
+
+ @Override
+ public void onRenderedFirstFrame() {
+ Player.Listener.super.onRenderedFirstFrame();
+ onPlayEvent(TXLiveConstants.PLAY_EVT_RCV_FIRST_I_FRAME, null);
+ }
+
+ @Override
+ public void onPlayerError(PlaybackException error) {
+ Player.Listener.super.onPlayerError(error);
+ LogUtils.e(error);
+ }
+
+ @Override
+ public void onPlayerErrorChanged(@Nullable PlaybackException error) {
+ Player.Listener.super.onPlayerErrorChanged(error);
+ LogUtils.e(error);
+ }
+ });
+ mTXCloudVideoView.setPlayer(mPlayer);
}
/**
* 播放器事件回调
*/
- @Override
- public void onPlayEvent(TXVodPlayer txVodPlayer, int e, Bundle bundle) {
+ public void onPlayEvent(int e, Bundle bundle) {
switch (e) {
case TXLiveConstants.PLAY_EVT_PLAY_BEGIN://加载完成,开始播放的回调
mStartPlay = true;
@@ -119,11 +176,6 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList
}
}
- @Override
- public void onNetStatus(TXVodPlayer txVodPlayer, Bundle bundle) {
-
- }
-
/**
* 获取到视频宽高回调
*/
@@ -166,20 +218,8 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList
if (TextUtils.isEmpty(url)) {
return;
}
- if (mTXVodPlayConfig == null) {
- mTXVodPlayConfig = new TXVodPlayConfig();
- mTXVodPlayConfig.setMaxCacheItems(15);
- mTXVodPlayConfig.setProgressInterval(200);
- }
- if (url.endsWith(".m3u8")) {
- mTXVodPlayConfig.setCacheFolderPath(null);
- } else {
- mTXVodPlayConfig.setCacheFolderPath(mCachePath);
- }
- mPlayer.setConfig(mTXVodPlayConfig);
- if (mPlayer != null) {
- mPlayer.startPlay(url);
- }
+ mPlayer.setMediaItem(MediaItem.fromUri(url));
+ mPlayer.prepare();
VideoHttpUtil.videoWatchStart(videoBean.getUid(), videoBean.getId());
}
@@ -188,7 +228,7 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList
*/
public void stopPlay() {
if (mPlayer != null) {
- mPlayer.stopPlay(false);
+ mPlayer.stop();
}
}
@@ -197,8 +237,8 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList
*/
private void replay() {
if (mPlayer != null) {
- mPlayer.seek(0);
- mPlayer.resume();
+ mPlayer.seekTo(0);
+ mPlayer.play();
}
}
@@ -206,8 +246,8 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList
VideoHttpUtil.cancel(VideoHttpConsts.VIDEO_WATCH_START);
VideoHttpUtil.cancel(VideoHttpConsts.VIDEO_WATCH_END);
if (mPlayer != null) {
- mPlayer.stopPlay(false);
- mPlayer.setPlayListener(null);
+ mPlayer.stop();
+ mPlayer.release();
}
mPlayer = null;
mActionListener = null;
@@ -229,7 +269,7 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList
public void resumePlay() {
if (mPaused) {
if (!mClickPaused && mPlayer != null) {
- mPlayer.resume();
+ mPlayer.play();
}
}
mPaused = false;
@@ -263,7 +303,7 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList
}
if (mPlayer != null) {
if (mClickPaused) {
- mPlayer.resume();
+ mPlayer.play();
} else {
mPlayer.pause();
}
diff --git a/video/src/main/res/layout/view_video_play.xml b/video/src/main/res/layout/view_video_play.xml
index 1dcc7b312..cae32a34e 100644
--- a/video/src/main/res/layout/view_video_play.xml
+++ b/video/src/main/res/layout/view_video_play.xml
@@ -1,11 +1,15 @@
-
@@ -14,7 +18,7 @@
android:id="@+id/video_cover"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="#000" />
+ android:background="@color/transparent" />
Date: Fri, 13 Sep 2024 14:26:32 +0800
Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=80=E6=92=AD?=
=?UTF-8?q?=E5=9B=BE=E7=89=87=E5=90=8E=E6=91=84=E5=83=8F=E5=A4=B4=E5=8D=A1?=
=?UTF-8?q?=E4=BD=8F=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../beautyapi/faceunity/agora/SWManager.java | 22 +++++++++++++++++-
.../live/views/LivePushSwViewHolder.java | 23 +++++++++++--------
2 files changed, 35 insertions(+), 10 deletions(-)
diff --git a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java
index 36da5c70f..b6fcc0969 100644
--- a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java
+++ b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java
@@ -5,13 +5,16 @@ import android.content.ContentResolver;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
+import android.hardware.camera2.CameraManager;
import android.net.Uri;
import android.text.TextUtils;
import android.view.SurfaceView;
import android.widget.FrameLayout;
+import androidx.annotation.NonNull;
import androidx.core.content.res.ResourcesCompat;
+import com.blankj.utilcode.util.LogUtils;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.bean.SwTokenModel;
@@ -69,6 +72,7 @@ public class SWManager extends BaseCacheManager {
private ImageTrackOptions imageTrackOptions = null;
private onDrPkJoinSuccessListener onDrPkJoinSuccessListener;
+ String openCameraId = "1";
public void setOnDrPkJoinSuccessListener(SWManager.onDrPkJoinSuccessListener onDrPkJoinSuccessListener) {
this.onDrPkJoinSuccessListener = onDrPkJoinSuccessListener;
@@ -253,7 +257,20 @@ public class SWManager extends BaseCacheManager {
*/
public void switchCamera() {
if (mRtcEngine != null) {
- mRtcEngine.switchCamera();
+ if (openCameraId.equals("0")) {
+ mRtcEngine.switchCamera("1");
+ openCameraId = "1";
+ } else {
+ mRtcEngine.switchCamera("0");
+ openCameraId = "0";
+ }
+ }
+ }
+
+ public void resetCamera() {
+ LogUtils.e("重置摄像头", openCameraId);
+ if (mRtcEngine != null && !TextUtils.isEmpty(openCameraId)) {
+ mRtcEngine.switchCamera(openCameraId);
}
}
@@ -525,6 +542,9 @@ public class SWManager extends BaseCacheManager {
});
}
+ public void release() {
+ }
+
public interface onRtcEngineListener {
void onOpenSuccess(String channel, int uid);
diff --git a/live/src/main/java/com/yunbao/live/views/LivePushSwViewHolder.java b/live/src/main/java/com/yunbao/live/views/LivePushSwViewHolder.java
index 6f1ba0358..add57ceb0 100644
--- a/live/src/main/java/com/yunbao/live/views/LivePushSwViewHolder.java
+++ b/live/src/main/java/com/yunbao/live/views/LivePushSwViewHolder.java
@@ -370,7 +370,7 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
}
switch (temp) {
case 2:
- swManager.joinChannelDrEx(dr2_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid),temp);
+ swManager.joinChannelDrEx(dr2_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid), temp);
swManager.updateMyChannelView(dr1_preview);
mBigContainer.removeAllViews();
@@ -379,7 +379,7 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
break;
case 3:
drpkUid3 = uid;
- swManager.joinChannelDrEx(dr4_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid),temp);
+ swManager.joinChannelDrEx(dr4_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid), temp);
dr3_preview.setVisibility(View.GONE);
dr4_preview.setVisibility(View.VISIBLE);
break;
@@ -387,9 +387,9 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
dr3_preview.setVisibility(View.VISIBLE);
//先退出这个主播的直播间,在进入该直播间,(视图问题暂时這樣處理)
swManager.exitChannelToUid(Integer.parseInt(CommonAppConfig.getInstance().getUid()), drpkUid3);
- swManager.joinChannelDrEx(dr3_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, drpkUid3, SWAuManager.getChannelName(drpkUid3),temp);
+ swManager.joinChannelDrEx(dr3_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, drpkUid3, SWAuManager.getChannelName(drpkUid3), temp);
- swManager.joinChannelDrEx(dr4_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid),temp);
+ swManager.joinChannelDrEx(dr4_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid), temp);
break;
}
dr_pk_view.setVisibility(View.VISIBLE);
@@ -399,7 +399,7 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
}
public void anchorClose() {
- swManager.exitChannelToUid(Integer.parseInt(CommonAppConfig.getInstance().getUid()),pkUid1);
+ swManager.exitChannelToUid(Integer.parseInt(CommonAppConfig.getInstance().getUid()), pkUid1);
swManager.updateMyChannelView((FrameLayout) mBigContainer); //用户主动断开连麦再退出画面
mPkContainer.setVisibility(View.GONE);
pkUid1 = null;
@@ -504,8 +504,9 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
public void onResume() {
mPaused = false;
Log.i("摄像头", "onResume: " + isNeedOpenCamera);
+ swManager.resetCamera();
if (isNeedOpenCamera) {
- RCRTCEngine.getInstance().getDefaultVideoStream().startCamera(new IRCRTCResultDataCallback() {
+ /*RCRTCEngine.getInstance().getDefaultVideoStream().startCamera(new IRCRTCResultDataCallback() {
@Override
public void onSuccess(Boolean data) {
//设置摄像头最大缩放比例
@@ -519,7 +520,7 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
public void onFailed(RTCErrorCode errorCode) {
Log.i("摄像头", "onFailed: 打开摄像头失败 " + errorCode);
}
- });
+ });*/
}
}
@@ -550,6 +551,7 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
super.release();
Bus.getOff(this);
onDestroy();
+ SWManager.get().release();
LiveHttpUtil.cancel(LiveHttpConsts.LINK_MIC_TX_MIX_STREAM);
rtcRoom = null;
}
@@ -667,17 +669,20 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
}
}
- public void closeLive(){
+ public void closeLive() {
if (swManager != null) {
swManager.exitChannelAll();
}
}
- public interface onDrPkJoinSuccessListener{
+ public interface onDrPkJoinSuccessListener {
void joinSuccess1();
+
void joinSuccess2();
+
void joinSuccess3();
+
void joinSuccess4();
}