From 03df39b539b83d5458c82ba2ae2ea407876b4cf0 Mon Sep 17 00:00:00 2001 From: Gangphon Date: Fri, 2 Feb 2024 18:09:54 +0800 Subject: [PATCH] player --- XixunPlayer/app/build.gradle | 2 +- XixunPlayer/app/src/main/assets/imgs/W0.png | Bin 0 -> 680 bytes XixunPlayer/app/src/main/assets/imgs/W1.png | Bin 0 -> 1064 bytes XixunPlayer/app/src/main/assets/imgs/W10.png | Bin 0 -> 929 bytes XixunPlayer/app/src/main/assets/imgs/W13.png | Bin 0 -> 1136 bytes XixunPlayer/app/src/main/assets/imgs/W14.png | Bin 0 -> 748 bytes XixunPlayer/app/src/main/assets/imgs/W15.png | Bin 0 -> 877 bytes XixunPlayer/app/src/main/assets/imgs/W16.png | Bin 0 -> 923 bytes XixunPlayer/app/src/main/assets/imgs/W17.png | Bin 0 -> 866 bytes XixunPlayer/app/src/main/assets/imgs/W18.png | Bin 0 -> 698 bytes XixunPlayer/app/src/main/assets/imgs/W19.png | Bin 0 -> 878 bytes XixunPlayer/app/src/main/assets/imgs/W2.png | Bin 0 -> 647 bytes XixunPlayer/app/src/main/assets/imgs/W20.png | Bin 0 -> 937 bytes XixunPlayer/app/src/main/assets/imgs/W29.png | Bin 0 -> 1060 bytes XixunPlayer/app/src/main/assets/imgs/W3.png | Bin 0 -> 1035 bytes XixunPlayer/app/src/main/assets/imgs/W30.png | Bin 0 -> 669 bytes XixunPlayer/app/src/main/assets/imgs/W31.png | Bin 0 -> 966 bytes XixunPlayer/app/src/main/assets/imgs/W32.png | Bin 0 -> 569 bytes XixunPlayer/app/src/main/assets/imgs/W33.png | Bin 0 -> 1064 bytes XixunPlayer/app/src/main/assets/imgs/W34.png | Bin 0 -> 964 bytes XixunPlayer/app/src/main/assets/imgs/W35.png | Bin 0 -> 971 bytes XixunPlayer/app/src/main/assets/imgs/W36.png | Bin 0 -> 937 bytes XixunPlayer/app/src/main/assets/imgs/W4.png | Bin 0 -> 833 bytes XixunPlayer/app/src/main/assets/imgs/W44.png | Bin 0 -> 673 bytes XixunPlayer/app/src/main/assets/imgs/W45.png | Bin 0 -> 2239 bytes XixunPlayer/app/src/main/assets/imgs/W46.png | Bin 0 -> 2239 bytes XixunPlayer/app/src/main/assets/imgs/W5.png | Bin 0 -> 1003 bytes XixunPlayer/app/src/main/assets/imgs/W6.png | Bin 0 -> 964 bytes XixunPlayer/app/src/main/assets/imgs/W7.png | Bin 0 -> 787 bytes XixunPlayer/app/src/main/assets/imgs/W8.png | Bin 0 -> 829 bytes XixunPlayer/app/src/main/assets/imgs/W9.png | Bin 0 -> 904 bytes .../app/src/main/assets/imgs/logo3.png | Bin 0 -> 2299 bytes .../java/com/xixun/xixunplayer/EleVideo.java | 11 +- .../com/xixun/xixunplayer/MainActivity.java | 125 +++++---- .../main/java/com/xixun/xixunplayer/Prog.java | 55 +++- .../java/com/xixun/xixunplayer/Server.java | 2 +- .../com/xixun/xixunplayer/SrcEnviron.java | 2 +- .../java/com/xixun/xixunplayer/SrcSensor.java | 9 +- .../com/xixun/xixunplayer/SrcWeather.java | 248 ++++++++++++++++++ 39 files changed, 370 insertions(+), 84 deletions(-) create mode 100644 XixunPlayer/app/src/main/assets/imgs/W0.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W1.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W10.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W13.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W14.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W15.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W16.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W17.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W18.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W19.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W2.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W20.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W29.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W3.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W30.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W31.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W32.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W33.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W34.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W35.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W36.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W4.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W44.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W45.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W46.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W5.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W6.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W7.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W8.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/W9.png create mode 100644 XixunPlayer/app/src/main/assets/imgs/logo3.png create mode 100644 XixunPlayer/app/src/main/java/com/xixun/xixunplayer/SrcWeather.java diff --git a/XixunPlayer/app/build.gradle b/XixunPlayer/app/build.gradle index ab53e6d..e18d8b1 100644 --- a/XixunPlayer/app/build.gradle +++ b/XixunPlayer/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk 24 targetSdk 34 versionCode 1 - versionName "1.0.20-sensor" + versionName "1.0.22-tts" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/XixunPlayer/app/src/main/assets/imgs/W0.png b/XixunPlayer/app/src/main/assets/imgs/W0.png new file mode 100644 index 0000000000000000000000000000000000000000..3e37d21d2578821714c7e7865e5eb50f81361227 GIT binary patch literal 680 zcmV;Z0$2TsP)w!zBT6{|Ju-3O5H>&Ktt=*A7$B8o=z7uMNv)8d_mY@LmKQ zik;U2ev6s60_opd19F6Yonv2Rl^))XN(J8Oh(Onm81UGD+@Ddk2id}YMqF%JSryQjp{o#V^yOEg`{S{`>R;h==0d9 zLs(9)qg10-WLO6TzmkS)aUuhQ*qlFHcoG-4lo|8xSCrmu616ZgnSLvYx~cXF{}NAn ztTO4r)}%*^lOFC4%zfD4PcM9c@w#(vl=(CkLhyK}zfkPR<>R>dZ`PT>eTaz{Rc*5IE5HETsWir6smJsH O00002?Vf$2==T=;L9=}(Ap!t3Rvz+c1p*;qv2Q(RrsnkqD}#Cks9+-4j| z;9ZfmoCv_Dd8dNPa}I8?-VwW=$XaBntWgZ$B0KEIPy{hc9nM=|OgNVmHk;`k+ zdbI8vRk}4zqX|(tabcHtBQO1)3ke=rpVnF7RJ#;93vs7O7Fgz|0O{fj7B9NW*lY=A z9|K%_gj;h9VETS{R`WYR>lZ-dD?sfFz*$Y_wOXC26Cy}O>s;t`I`dF3<>2bW6p|RM zOyDb@0Diw8MugmDE%G{m;1k?J$Bh&T{Lj~2>!^j|Y$eiO2*Ia0XyeApWT`uE0p_0S zGI9PyHOh%rz^MD1FKGH?lcAMy&hLdSgU@Nv2MKR2Dbl%7mNV= z_eLQ94kB|;dI=PJ3S=CEx;T^o?|9DY4r^MWJ+lH=>U*F#V$zq?6N$6)E@vs%QGnmG z=G%tSXf&W%`vEhJ5AO8c^+iQ1j16v6sa5PTWkz;^{sFLP3Q7h7Jx8>p$s2g?11)d65rBVsC23g?qxN<&K-64T1i?R+l=Ld3t zqfzB~$~NTl19E;pxsJumcjGGAfCMHE`hQNGgQm0?AhW21+$DqHi#n5?A-gJ$ajSeg5f|xDq(mAPfba7y i#I7#zOPLh;BftRCyvX-06zY)x0000)P)-2a+Gevkx2#rDHT&!JT4tH4WB`Z5L0hd>Qfo^pLT5go zORq1f=KO3nd#yl{00ydXep2VLD`Nmo(OE~lPp8wQ&Z7*1S?J}8C#@65Z@1f5s>C2t zO7(^w?m;_wIlEXaPGbRnrpR=d^kJa$bXLk?9!(9ioP<>p2u`GZ&O#q)RJ|y^G5a~l z13DjeBEt&wE-~Dtp~M8xsfYFfx+$(_twc&nlo5xJ5`Qm5XM|3ga{{u;a=FaHETMc4 z`U5imEz!jm-OJp`1cHv^hCMUGr*Ry!evgck>Sm5r#0q06Y(lbwS3<|#V59yQl||3; zbO@m|LPyL-+qBR3hG$Ndo8hO-cn?tas%#{s6Ep=6-jd#hvYHEkl9#t7)>~r{x5)^Zvnb{L9-|$El)g% z8T_U+_|d*U1bFlg;MU`?SV$!cRU-x|zxnQ13F^INS9umTwI71c4v@sA+k8O68pG%@GOJ-ufW#sh+h#Ev4}G{ zmz!9@iEYPDLAu?p-Td?2ZvS{sOtc~#U@dONI6F{@6`XNGA(I*HKdSSnGnez92``bmaGfh%J9OZ`6#e2n}=0Mzu$+$!$bGi3o|n_HP;=& za?@?i13YchPMRh^Jw1hXyZv7pMFnQ#WT9-@K67?<=6MpME17W=(9;Az91i^ykTPZl zu2@b^0$Hhktrh5WIziTteWkS00#7aR8RGF>ZPGq}baW&OKD4~zcMe43_W}7`9Fx05 za2X5JXlQNJkBzP-RiM}F!SV5Nk|ov>)rFXaF2y8*U|H6vk12Ju{#+tDt!dgaNLGm5 z;E5I_0gr87Nns0>C@>?mWPP42KNt++f~TOJN9#*xLQT@DhHxV@y!;(GeUh9`nQsk& zZ$#IMpSc?hWSIfJ4!GetYY<_~!}t%pMpQ5PC%^#W=1zIBLR9+z0000SUDN%B~W3>^M| zh=FbdLOE2du-$HT-4TiC<^|kwboYM0KlbQfD0y<-&d&S9%h~OA#~%CHD0s5Mvcr14 zKKIJ6On}c(z;d}f_e$`o4sgM0wK^65yagck7mJ1Q`yMy)w0tSY>3D_ zzu9bTlkXGx(b;1axjVz8ZkNd{@O;sHZV)ygKQ=xWlDo7>?iJ1oK}NwE#$XXvCfguv zKFS_!fqZt(@5@Zp24NV|BFtd7F^8EN1@o#)dAl&4EZq`?60`zM1@S7d1TGbLR{?YoJJ1xMGCGdml3laU+4COoKnTxFelt5Ty1;(DefxH6 zwL6DV=F6ifvf<(YnLwX`LZDxC4GhB=X=f1-+63wYjiYpoiPzLcco%3MWd}avRxP|2 z-45@bg|9{lis7Qs|69U4QF*XcWOz^%)Pjpm^oi0Uro&c=_89;@-D=@BkRMeCC-(+a zvEca^G+BMFf$-7sc#NjgsSo5Rl@cgCT)dh_n9XM5_7$kpY&Jvwf1PI(-GoOp8Vzxa zJ2iU4{@?+sMaGm}w8C<^tnK%E{u6rOQFualpr@noF+e$omk=WBcXgHa%K8Ehgi=p< zz}40Ir_(9v@9#o^)}2}Z5=!8OcAd(DdsG0?LIo^c!)LeKrLoy{U9G=btyI`7Efv^q zw<_WDekaxiQ2(e}|Du34t&PLsP+Ke(nVvxf0v&{3uh(bcVPnnmSbz$=RUPkP7@if# zfsrWY#$~2cjB9RLT%hk{EZh#1t0wLgoaZ1Kt(z^XCcEdUg^M4N^F-P zJfd@*Mmt4kB#iIPW>bprX#IBzfEPk)V~mOtK1)8&fEN({MY@qOC4yVSrX=Cf@}0z; z7?l8eqL7+o-H7lAm@_3NE?A&1-15?{L|mJN&J2$1;Dc2orbDb8RqGc;Oi1t_Ab6nE zR#8yK-Nci+%;$h;8V|3^i2l|{4VjdX=XMgGUGy%^RT9}Ta*HPD0gZ4 zCh+@g_T{B@o3G{!oZl}>fkBqeF?ry_L^9}HQ*&#UbcJ346~E6kW7JgQHyxaEHYHcLPI8WKVuf^v+t!IvK|z5z{2h;)+JP< zgehm~XX1N#eed7KZvh4X>|oJwlfg$>$+2?ZUl-4z|V;p&4Al=QofhuqbFdmYUM}CZ8WLO2>9cE zVuzlqP(DoTQvaI&cdt|y3oZcu!jQ$IXSOH?{tO5e+w!nSDY8h)qn<70+a)Xhhc1`P zY(Ag+COS5BkO-G2MH4EVAbn7IG-8xxh?}DPJzPdr!t#2(c8RJ8%S-A;u* z=F=$7Jyk^lJ-^@Yjbx#rxoJgQdKA#(%jMEod7xJv3jHb*Y0&Ga{FP}FWz9k}+i;4C z^2UTng9V$DzCsF3b+gceP318)kP#XM-=O@ME3Y&F&|wfDzqW zjlh)IY&N%eTUNdW-j9t}WMsrJZ#T_RoI2EL$*GfR02zVx&@zQr^g0&oYPGWE`Jr62 zxwlnlR^pqr0V<4)9!Jg?!c4tAB{(0eQs#p`s3uFk9-RXOX}f5&Db{8?d!9nZr{D5~ zd>P7z>~La6pF@S*-yP?)O8!72mZQ1z+JYUp1CX zGWRK9@Xw)N88slhJ|vDcGU(wByHBGI$^L(x*Ugbah$KA;Wrp&R5cLO9ADBLG4z}5R zH6)oBWF8B(n4!#qo!;pBz|5czOvG;%S_2HnW9kQ@CpZ$uhb%&(z+ZW>(`OO2fc1g! zz4U>JMlLMMfIx9#xu9o(hy>ls3J&8_%)KakATec-nM0|2!y#7yVqugm}d002ovPDHLkV1kEqr=b7< literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W17.png b/XixunPlayer/app/src/main/assets/imgs/W17.png new file mode 100644 index 0000000000000000000000000000000000000000..04f83db4187915a596275dfb9d1981fc8b465033 GIT binary patch literal 866 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 LNkvXXu0mjfa@VQ( literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W29.png b/XixunPlayer/app/src/main/assets/imgs/W29.png new file mode 100644 index 0000000000000000000000000000000000000000..1178e2ecf4d04a776935d8d8c962cf7be7e8197f GIT binary patch literal 1060 zcmV+<1l#+GP)s+3$ri@>xH&Ly8s!H_w%KVqn7l#Hy}I8hOwp4}4 zQh)<~7DBX7R;u9W2!WSLfHprLhVa<@+%_J4abejAHEfZO2WcONhohylrjZaZlTF`1 z&2 zoZG|4R>Tr6`+j2~b$~y-PTHRlOa(l!;CsklT8IS{TuYV666?YRIc8{`XB<1bIM)=+ zxx_(xo(R$c^uBJw2)$_h3t;#|bqSL#R%dJM&&+?2f8-JbPFi}0b>2!2l){Pc^f01w`y zWu7m-8%6Ln#SC+m?rj6ydK?zWN|e(CY~jO_f~^`$eI&%6H(`BKd;u7=2u>@}l$E=G z?n)Hgm+7?D~wg}21j6cgNuCw2JqY1F~GrTrv>~X+pIhR_l^yN zmDeN;`F@!TScSV&JE(&VOrso}Rmh0C-LAZAE3U1rxxBgAXSbaSCRgA<3vfZo47|_2 zxpjPeY;v2u!QHLtQ;`E*Xi?y=Z2qYq!cpTUaU;@&IOF`z676I%0oV0S`|IdR9o--< zWUcPg)6<}-(mYwn%36T&cpTQyE!C-nFZd7(SW7Jc`F_72+E&jcfSVQgUav<Rcef{L*WU75dQflZ7pGsT`s(Ko2 z_cXUFXgN^(SOf0P6~t(TCLc7-O%$9lz=LS$;$)#RD4q__61ho8ZdaiOYQGsv0JH)H zP*K+sqqS)B?z3{)KO{L zu8A)o@`}8Lux+5kXX#w%&D{$z@b5IDgy7TY7V}3D@z8}{WnKYP&xK6CcRqY2ftu1y zi|NBBZg6OaRrguTOjQ6nR7DVF@h(k?iv1MFE2)MY&7|Nhu}#Ev9BGXrE1;3K1t8$& zMD$Gu5+Bu&nh&37&N{MUvS=W$DNQm$vPngCUz#9^1FS?&r|ktPbr%vkovtUnu~D>u eRu}wFfB^t__qg}Sucv|l0000ySi%I-rU_?}xB~hQra%pFe?Y zkOH{*F!ez3Z{NQC`t|GIzrX+QNBsMI{QtAM{|}S?|NZv=@0Ty1-u(Z#;u7p;uc^|(oxp>F;`JRG0(L}cZYV2KrcOaIs1 z(QFKr(Dn{)E1%ZLFZBGkx!4NF{))>z$G5BA3m4mQY>ofb&4RT{H9sbm$y zu3OTvdfseo_W!RmG{4bYR=T6IZ|(j1hYlCi<(C)~YRqK)mFlo2{dK@rmCp|QSse}> z=}gISU{?Jg=XuQT@_}c%7G|5>&M;XlZ=g6?W_FA1pKf zK3l1$MSpevW9~WEbmi{MvSrkHx1(`s(naR%%1>MsPJ5L8v}{StoH)VwfNRVFu8r2u zGF&{QFH&zbzsGW6+iphxdoLaD eZCy6^Kl_${2I{iWXY7DUk-^i|&t;ucLK6VAD^j8W literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W30.png b/XixunPlayer/app/src/main/assets/imgs/W30.png new file mode 100644 index 0000000000000000000000000000000000000000..de3615cdae4f69ce64bf866d01e3fd4a873ebb7d GIT binary patch literal 669 zcmV;O0%HA%P)HshS z>2JU21ceDG6Hq2-I{|b8=udx1Cn)`|L`KL4?H#(Ph{nN*&yM{hD?gF*p6`6VyI2Zl z{CwXI;DMtLW2AX4hw&<}-!t3qNk-E5FvdjO6jvZ3xA}I@k~k8c!AM(9(I;#86+kQg zWI?<{VQYQWg8U;qJ{icb!F~3&0(uRIC-B%X5HGRhm_!+pM_=7Bl3&|yUSkW;%A?C9 zjM4UmYa(Spe#cCH&*A%~F0`UUi4z&;WU6NMALwA>#)oqOv}qT@4fZ}PuweH4zubi> z`e+5v>Q6)@P@2^jQ3{~2IgVBUkxyb4FmnAt%4D5dz%|?mpy=bneMYV<(D&rFV^;!F zPXZDuMZF|*t}u&TKnhk!V-_H&DG;@Q0W}Ds6>!YEY+XsYs+1aFV{Dk7)<`*hog$46?ev!OISF7K_! z&c4*;zbo%aq2jq!(Qq=ncg2|_GiqE(u@APjdK9VOyq!hq?KJG<)F#+T$Fb~WI zD5g;+n+1|qvJ1DCR06gI-!D!8UrnpIJ&MmoWwC(Wtdi!jeezxJ7@++fpoODf*WVpOE4;-yVWq%hF2{hXeYkKBV0jJ4o!Jl6KjQcVPgB;XYa$$BC{Rn;V~IPK$CYTO!nG2<~4*7^yT z$eXEq%%PG4`19JkEQI9auGT#lHwH0e4u^_E@?pnrV}#3(Fh5>3b7z)WARFNumAg!jx4f;%neD`hjcE=!PKB`vFXC=r6s%)qgV~0LfET_|CT#AK#>uML2F>fxqYO z<1Y-(biWP)cV+kS#74$f{(~&!N83WB0=-^O`@DdbINSMr2$_VGS)+(Pt+OqJKS}G zcDrqgyp#fH*QM3B(vjt5B44dm!HQQ)BY<4SDtYP&NI=d{;@xgnt9Qt4Y~+*tu#`9u znNEoqV{GImG>A9_E2T>ZSY^7Cg|sLE<#O36QA78^T4-I%Lby5^gTo_tdh=#e1bMA1 z8&9JNS}eEyn*@j;kE_3Ts-bbaE3=alO(KKj6NVcZx{}uII8CiKQ=%EX)RUjEfc{to z2LG(vwqgzP^+uziWfzx0J@5`SFcXdcob(su=R#YvT23NNrLWog#R7Kz8@Jp2=201Kdo?V2My0{{R307*qoM6N<$f_=xuBLDyZ literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W32.png b/XixunPlayer/app/src/main/assets/imgs/W32.png new file mode 100644 index 0000000000000000000000000000000000000000..581663d8cbf37d84897ed055c2a2ab8102e41533 GIT binary patch literal 569 zcmV-90>=G`P)wk{sKm7xcq zCurtQHn@{aU>=R`&exWq7?V1)AaieJBNO#f>}U_2V0HVprTpm5gAu<@^ONm?FP z6a)fG#v@8+34rnG8RHR=lLTbUKXjNXTwQ^*! zYj_{MdF=TbrqUZIXeSp|U`Ts_Le6BR9-Y9@c#e7q-(Df>s|8qv4-=x+A#kPnZ(Io^ zvDOJG9TBf(w`mGFj87QFADyA2_8|P+N;j&3xY2^E(l0k1LWM;$iv$Ye1Ry5S zD_cth_Ec$fXTkUrIBQEn06tvE>_LfD=QLW^wdlR^_&x~s^^%d89$b{{@=-;gu<)p<%h?1UfSC!! zU5|&OY<1cXF3xa>M$Sx_Se7~ju+12=+Tq#H^S=)B9{~mcf9?!P98xvj00000NkvXX Hu0mjf!5Q;; literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W33.png b/XixunPlayer/app/src/main/assets/imgs/W33.png new file mode 100644 index 0000000000000000000000000000000000000000..3b51e5aee4c753c34d8432311c57d5bedbf5e5e3 GIT binary patch literal 1064 zcmV+@1lRkCP)1u;}=Iu(fl&!`fXI#IPKO~_aCVcxmV z=wzMkvvaodlTJy`7x(?%_dN|#hJE&0$B!y51J}Ox^vmWf@5`qscmY4^xYoGsrCHyb zPf_a!xJsT!=B)3|rKEY0@Jf(N!2r7f!t1lXTuWH{EKrX_jukPGTk~pxs>GSfJX^q) zIL5SJj%$Tn!tNsj7Uahi?DJy*yZgNclU5z_j{xpG0hs;;7+nC2e*<*C;W`CDN?k=u zSeX*AZJQOUjnK5oh+Ka55@Bw%M-|#kl>iDZsh@Di!tlgOE0G{Z?bl-o&y#rYHtdus%2fH7uA2zQ;8u5i~d2w;kj6?v1XNBVzWB?BVCxDSaIchUkg^VznOuSnqbg9j#1S(kwKb=mU zCBVC=1WH*D7!HSikC+v7DFRfmQV0HD7z_qMM@m^;>ZQ=@^&Aobkh6fMY0WHLC%}F9 zlqzijD=p#s{XTTNU74e16atA`VLTo?IiC@bgc+rf$;@-4gVW9JEJZTGS)mf-`ye#2 zm@P+bB@R^71LhtQ{v8I^PBf!tp>@B&k;To;jSAuS{DcoAfZ51tq~elbE+QG6VSfKU z_FxN1m_#Dd7@QR(Y>UJ4dKenyIxQt*6`6St3s9C-Jl$j*t#6^=jYQ@`bW1bnLa$PA zi?U5>HE1rNY%=%pr{iL*?LGPMOxxu4>(s~W2opSwY;LLZBbgQG>s}#5y)HX*}4FM9~ z9pG2-@3MqOS3GS2dryfAc8g1&{P^-Y1k6I?x=_LMy(Xbi-mOf*S(lXIx$hQ|h=GQu zE3FEq1tzCa-N&tX;Z6kaV%S$sfN2m{kvh{YCM*T1QG+A3 iO>R?ktFJo(Qc0Z1)uhwG`^fVfBEU-IYx$Q)moO zTFNnh)e65?wrT*9r!XjR{b4B|9KMGe}UMLUYKnjh>aJ3T4J_ew?3$~-t2nK_J*#Q=dMx(9|vc#^on{vRSg)`&>e)vxGL&&!DvE#Q>8Qd$(k@epz3S^q9WtrvY*83e}a*s)c@uJ#R5$gtE>0 zW@~5s_Ci@(N8LtO)i#l`d;et6ZLxQ-z7Q{I_NZET$_mL9{k(&2OLU;&f$TwF4l03F zLwxFPR*i|wypT27%`E#rf?2qkc{yoSB!W)j7Dp1-d6U>}2sK!DsCTEemG5@rUyilp mPIGo`W$mKf2x-JW0R{jpY96%z`EeZp0000<2i}*M|t)TXlz0*RN^^^pGtN3W4mj3~;cNz*q zHbL+m)P38lZrHUmDS{_ax84AhLl^MiF}@vp0KK2b$7i2u4{#r}w>1KfBASz01jze& zfvJI`5VrxQ;8Y#8ghuqX#sJfJUxTIIgzOD~ojdEn*(ZR-Hvr=;>KlNSVK<^G8;Qsb zFin#Vs-|!15ct6>fFCcx;cR$rH-rcQ$Fx`tK=3VAB8Uq`utXEP(I0 z%;>e-TgS>(kpNy~hfX;*-X(_m^3d%q(QH@R0Os*ltiXA4x;%o+g5~#wC4H z0l!+U+`xkyjb~iy4@fKjJ>*_mO}*G5yjZ|&HjAVu*3;OyqtPgui!DV_dM->5i%`xJ z_@LjJ5iMKe%K71NXl-5rIg_E$3M=3uPZjd`d_K4GUDE50H0o7Kh+c_!cZ>+sFpRLv zbP;?>wiYU~N;H(mbzO%D_LOTW;a5%vP9*|O`R#EqiHdwN=U{|X%SfA&m?duT!Yw5$ zFDMd4zq!-t)MA&AX+y1J-7RebH}%YrGCS5)K3xbnZCF7{^rFhP2=FV}7LiM#_0L6C zb0N}bm`3s^~?Xu-G zzo^E2d4+xpK>c%Ou$yGv{y8#?e)wR@pY#`8HLQg#=A6T|zVhBBwOw@|uxG{gkzMA^ zIyY89WD*ED=PYLX_WhagPIb)Ge1i8Goa>m tsg#I^ef|vM$3opSntT`9c9h=&3;@iyBYTK54e5hB0IB=X z8<=f3AtxxDpy3386C^zW;S(3znZ4$7&;LEuL2K!dFqj}xdXR=yMB6l${YN^znst; z*8d7#Q1{vjbba;Il>L1(WpxpR?#{|$C8$uY3JVu8!4!vy47D%v00M`n9jM{gBo93B zHBRW}4EP#6gB-yh!*f2LcSoa9F_8xdeB01~mdoXlfjYpALZRSADxed1q|Ihy%w{t_ zf>b~WCsY9dU#76phIYH1F_}z^z#Mg=1kZsdLw`D!ZO9AjL;K7KqZKn=^%(fa%SK1#$E9w_Q)eX9RaRKzg4(Gfga ze!X7Hi0Y{TYhJOWodPib#KryzeW4414m-86SS(~i=X8|7S)a}yxy3w&O%lr^!AN0> z5PHcAIEKu4JWdQAZ%W()*awDL^#cqG-c=DSjtLQ+R)*@}fexQWo1(j^Zb+Wzss36Q zz?V*{5Ug*_ED{<+Bm=6SE2H-`b1MTMGtZ=5&Lc%C`$0!K9M0_erbQ|^m{;=5DrDcBml(&}V(Z;g$ye03HJK9C>F|#AWgiz&>y<NB|8kAF(o9>0Ix1Jp3-aqM{S#mS3!QIYF9TGD00000 LNkvXXu0mjfa@VQ( literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W4.png b/XixunPlayer/app/src/main/assets/imgs/W4.png new file mode 100644 index 0000000000000000000000000000000000000000..17a05d8b6353c24e057ff9d40f1255de8ac6f3ea GIT binary patch literal 833 zcmV-H1HSx;P)DD7C^G^TFpQ#5GD*=7 z7&wU(>%GzAaE8RugfI-t@KJ@RK$L~c1Bf0Wq~q8IBo1*O%3%c2gz#)3-wg8sh17~9 z?q$e&8X83jP(i*J5eL{N4ZiI2NlwyOT_}qO4S5+rh5D+}-wlX1TWqG#P-PF3qR{5`Jl zKW$scN95dR^sw^%6)oj**~eAyJ9Y#4-6UEF1Uw{kjfG-5ojRM%Cg~Ddsq^#(SR+-o zE#14_?zKxdqJ=89k>Bt4QM`gOtOcJJV4e5Z>-Af={NM#xXP@PADYKyM6tGw<((L2# zoMQphriF_FB=AhYz!vh*KFHoqc>#efNn>l{gi<(OVsF0m))Zj6F>p2a-ozzvxC`h(_{t z)&9nYOfkBU{Z`^U03vW`I8#MFV^xt|xb?Jw21T@(h}?EUza#mSZZa?VZ{kEo(q?1U zwpOz|1^qss&sAss7KmTwI@n@|SmzM6G`nE;DA~hg*=f-YcR)T+ax%xncyT8f6Xpi* zM7&@Bt9)4fsqRib(b>nJcW;$Qv)wx6)_21~%O*?xaI` z)97l>KDNC4q15G32>{%4Kexa>-J=lz*{^XWnCi&B)xso$P200000 LNkvXXu0mjfj<|;B literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W44.png b/XixunPlayer/app/src/main/assets/imgs/W44.png new file mode 100644 index 0000000000000000000000000000000000000000..d8293890d9ba1cadcfd9b0f6f5eb63d74afe94c5 GIT binary patch literal 673 zcmV;S0$%-zP)HJF(Oa_nH{sm=AdU$h^RUo2l|op z;Ued3WXGi5Fllp&8q(9$Oqz)b#9T1Ja^TVtvZ>~DeD%NG$W3s)vs!Vw5*&naSX~| zL(r#WI*>EI3u)I!*5Kphy=@~{*D?B03=Sx*H3A+-@6CUhF=oRWBzY~Ua4AvQ&bnh_ z(dU|P-a6@h(X~0yNb~6$FK-L$$ZcKR1_T5I1O)sCJ_Q&6-6<7sJWLh%00000NkvXX Hu0mjfsIels literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W45.png b/XixunPlayer/app/src/main/assets/imgs/W45.png new file mode 100644 index 0000000000000000000000000000000000000000..9129ef8a667e55fb09c68d65f5cbf1ba9d46df9d GIT binary patch literal 2239 zcmaJ@SyWS57EPnr5+w>4BqBu&G6`fNF(f8J$V6l`ri#I#$nby&8BBr+lZr(|aX@q# zl+XwcD1w3m4KzyV*dmDHuu2rs3Ro>rC4yKosTBP{uYizucm6!^8)-3~4K4^ZD@wgV9;em_lmLV-mJ0zSS1O1Hcz{5h zvaJQ6LLhV8B>X6KRA>lAB$uKEQy8>XssPy#2-RP!5Qq{1HBtz~OJp?EV7(EAl!$4l zNMa~9RKWleBtfZ4U_)vcUzD0CB8yS}Ymrnf1r(41Y5`I!O_Hf7S{iCvmjdpm!Wa~C z8lq05p+1|63XMQAWD0>m!D5j! z4+_kt6vt6`O!iDJ@I*r;sMQJz2BXnv&>CN~Tp5qSk;!BX7LUQ>eL#edDn+IiXnkZV zmstfSpb{x13bjNoLry6Qgz{uH4Fx*=dR!`m zm6`|qVdJZ46+cA*V0eH^o~#ss{fKj!C4;s5>qJvP&<%wt7bQypnVQR_p}+`QED=*! z3}1X8fz2Wi2_zhjMF=GO`ugF?1Z%otN^<&Wqfh01X!C;XHs2Q&KD|esa;{Goe1De51HTO@=o(+K$G`0OQy5Ql< z@B=b%;+5cNpYn#aKp>VFE|bpJKI<>YNO=6M!|g%oz^hWt5B;~ixet7V)$en+*!!() zjjDvgC4%>+#@`=!pgx?dO0Zo2p3RCn@^~HliU+6o*hnej@wMU@tMX&fZLyuzWO>TR zZ^oZfMr+J3XuZD==;oz$wNBh9G^Z5x7XEf!HWcD!XJ}q>k{`><u zHL6S0J><2lprR_4{42{*XKb1fww0dtzpcfVEs?>Gm|RU{*G}4&M<<-TAhaTMY{bsb=hCAmQ;{&rJFiFSvLKk+~ z$LpVVxp*p|STxb~)22qh?Bxp|IgFRp@nE%1>c3;&Y)~Z#uj;{u6^oH8o7kXW;I+_=R7dLCgbB&viw_eEY z9U6({EIPRFF7stNw9t*}waJ5@wj6iWr4p*q^*8Y!>0U=~i^LBM)B1nmaX&H*S#fhe1f?})s|Ui)AECNqZj3dX`2q0z)!?2r36-2d{X}8 z+?{Ur{M1-?f9}h@H*OsRZ7RSUs;=-~U@UXVEZf;m?KLme)VdH{7X0lGdayJNlf)wv85aJotdMEESDg zFHGN9OLuthSJ~6~L^uB2sKe*0CeJGV5q`z(g58$OJ$`|w%ubLV-^6rwuvz!o-xEk*Fe`tn{2Z@tnuiO4PN^FNMc9Al$Yn}bn;pO&u!<K%W<XabI!g~73hT(Z>+ZI^^u+c~ zqiGF6^D!!OdkpFqixAiq-*ViK{Gz_=M{qQl^)ABo&b+htYtGlG&Qx9ckB3)7K0Ky3 z4;>zgOde>HXJ#?lpGF=Eoc=wx0$Mv@Zyq7tJzjkXm^{F7TZ?R>%R=B(c@@iRb9%bB(i|>YHL^3J*!KRm-8Y{u z4QdQAyqc3e)P&oVwLbsN{EO#ajMbMET71t~yxU2q^QYD)qv|FQ zu2d^7FV1(gV=baQ*Fr+g8JZl_Ub+-)JwZj+7=qp~k4|pImIW|BaCZF-VxyLs(>CUW QPyJGGSz*jefw8;)2M)TS2LJ#7 literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W46.png b/XixunPlayer/app/src/main/assets/imgs/W46.png new file mode 100644 index 0000000000000000000000000000000000000000..9129ef8a667e55fb09c68d65f5cbf1ba9d46df9d GIT binary patch literal 2239 zcmaJ@SyWS57EPnr5+w>4BqBu&G6`fNF(f8J$V6l`ri#I#$nby&8BBr+lZr(|aX@q# zl+XwcD1w3m4KzyV*dmDHuu2rs3Ro>rC4yKosTBP{uYizucm6!^8)-3~4K4^ZD@wgV9;em_lmLV-mJ0zSS1O1Hcz{5h zvaJQ6LLhV8B>X6KRA>lAB$uKEQy8>XssPy#2-RP!5Qq{1HBtz~OJp?EV7(EAl!$4l zNMa~9RKWleBtfZ4U_)vcUzD0CB8yS}Ymrnf1r(41Y5`I!O_Hf7S{iCvmjdpm!Wa~C z8lq05p+1|63XMQAWD0>m!D5j! z4+_kt6vt6`O!iDJ@I*r;sMQJz2BXnv&>CN~Tp5qSk;!BX7LUQ>eL#edDn+IiXnkZV zmstfSpb{x13bjNoLry6Qgz{uH4Fx*=dR!`m zm6`|qVdJZ46+cA*V0eH^o~#ss{fKj!C4;s5>qJvP&<%wt7bQypnVQR_p}+`QED=*! z3}1X8fz2Wi2_zhjMF=GO`ugF?1Z%otN^<&Wqfh01X!C;XHs2Q&KD|esa;{Goe1De51HTO@=o(+K$G`0OQy5Ql< z@B=b%;+5cNpYn#aKp>VFE|bpJKI<>YNO=6M!|g%oz^hWt5B;~ixet7V)$en+*!!() zjjDvgC4%>+#@`=!pgx?dO0Zo2p3RCn@^~HliU+6o*hnej@wMU@tMX&fZLyuzWO>TR zZ^oZfMr+J3XuZD==;oz$wNBh9G^Z5x7XEf!HWcD!XJ}q>k{`><u zHL6S0J><2lprR_4{42{*XKb1fww0dtzpcfVEs?>Gm|RU{*G}4&M<<-TAhaTMY{bsb=hCAmQ;{&rJFiFSvLKk+~ z$LpVVxp*p|STxb~)22qh?Bxp|IgFRp@nE%1>c3;&Y)~Z#uj;{u6^oH8o7kXW;I+_=R7dLCgbB&viw_eEY z9U6({EIPRFF7stNw9t*}waJ5@wj6iWr4p*q^*8Y!>0U=~i^LBM)B1nmaX&H*S#fhe1f?})s|Ui)AECNqZj3dX`2q0z)!?2r36-2d{X}8 z+?{Ur{M1-?f9}h@H*OsRZ7RSUs;=-~U@UXVEZf;m?KLme)VdH{7X0lGdayJNlf)wv85aJotdMEESDg zFHGN9OLuthSJ~6~L^uB2sKe*0CeJGV5q`z(g58$OJ$`|w%ubLV-^6rwuvz!o-xEk*Fe`tn{2Z@tnuiO4PN^FNMc9Al$Yn}bn;pO&u!<K%W<XabI!g~73hT(Z>+ZI^^u+c~ zqiGF6^D!!OdkpFqixAiq-*ViK{Gz_=M{qQl^)ABo&b+htYtGlG&Qx9ckB3)7K0Ky3 z4;>zgOde>HXJ#?lpGF=Eoc=wx0$Mv@Zyq7tJzjkXm^{F7TZ?R>%R=B(c@@iRb9%bB(i|>YHL^3J*!KRm-8Y{u z4QdQAyqc3e)P&oVwLbsN{EO#ajMbMET71t~yxU2q^QYD)qv|FQ zu2d^7FV1(gV=baQ*Fr+g8JZl_Ub+-)JwZj+7=qp~k4|pImIW|BaCZF-VxyLs(>CUW QPyJGGSz*jefw8;)2M)TS2LJ#7 literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W5.png b/XixunPlayer/app/src/main/assets/imgs/W5.png new file mode 100644 index 0000000000000000000000000000000000000000..5f7cbd7c261813b1247cad326b3228648d7603d4 GIT binary patch literal 1003 zcmVxX z*_{c_(lRZFj~nn!>T~(w;h}$fdt1%42MB!EDS$maJvrm?7{B`9CwqH)!^9OR68Jc} zVjf>yg%DQ5T}lAJqoTB(;u@-7UnRj;psh$`QAu0^iShygihkYM4nwTx>I!@>BGQ+a zmt}uy!YWiaf$EkKaAd|v0&da3PbL#g?W9LeV*-@_g|q2&n)Zk*SD;eF=+9=e)aP&? zl&JD6jJ>|T#wW0;A_H|V#ww;1?vIE+76$YOt?oW{#bUI*Ia<6{h%rwjkRqU}Qp4R|qkk=JP| zWl_2X@I3^-P>n+E?b{}SX@MIvhYNp8d!Ydm9K4pU{KQ}4j2prv{hRI-8;6DJkZ`_qg z09hdtF4uBY7}Rl{?M{Aw+nxS#r=Jdk@#n9=R0)6m^ zyqhw1Lm6M1QCTAl3Fzvi8lB!Mc#M3PY4<+l|1d@ALZv75{(nMzY!g$f@s#cg6^&Bh z1ZQ$0+PF9D*;ocSFd!4~)MU!062RvI7`ycm0wxved?kQD(@Aenwtz&(^d=}+gH&fb zX_Ha^1niIeZR%YzrQ*KTCd*vervJDME7 zf-zgPVSV^si`yj{gE~mu>qe ZzyNp3v$(L6AkzQ<002ovPDHLkV1l>w(l!79 literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W6.png b/XixunPlayer/app/src/main/assets/imgs/W6.png new file mode 100644 index 0000000000000000000000000000000000000000..2e1a63c5f3b4abd2909f1d25dcb8ea7e83431593 GIT binary patch literal 964 zcmV;#13UbQP)3&=WP{7*2qE0$67QIRFI|pW?4{+dZyktU&{ktVt@bstb8E zR=u8i)6>&qTR9?%q5yt8unXzc0PGPgv~7D}nFJtR0;_|KB0Y4#d{f9*ParO%fzB66 zz8R%Qw-6^XB43OXB%7?!c`Nd63e6|sMu&r~Nfbk25EBkvvOF*bt3a3?rq|3dMfE?+%B{61c%Q<7&*;E=6UlG4TWhn~Bz5zh9FwtBn9t{W z`ve`ZjlyEFP(`0u2Y#DGezjUz%jHtL|2wdrNh5y>dCZT{fzX7_YBrl`%Z4Fz=)}`1 zDoi4AmT{hnw*3}qH0m0|A`I3GQH>C(b>wvD;1K3D3z!a|w#DK^;u(-f+`-vkZ1a*J zo_?}UsZk;tJL;*xz;lTXIPCa_Q*udDlUY>BfjsiNM)I*`6)K^0(#{0#q$ryl$m7WO zl!tnl34B>OH@xomduuwK=0P6$eB$I23tJSOYC0)55*G^<7jDLS#|3+zSd}>92qt_1 zWv(8NFc?vgct(+hOXcYTL>}?~_^0vnSLB0vG40+d?We%WkbIrOZF&2l&+_#Tzqx6r82v7NKcK|2uNbg{Bc(2C(nh12ftJFt zM}_{|G2a!1=5bPT>1d38T;0f}Q4(?}F*)>(IY#T{US77$Ya1gK0ao{Wcv#j|aEYhgtaG@cqkiAE(f0P3P zeY16zgdnxPWpyL2#R0r)B`io!q5oIyc$fmKvv*^*KipG_pL!p-1G|lB7ml=;O!!`a mGHGeFbK+N)X2tN200RJt=ZzQtqLJGG0000vdB8*1eg<;oFLr5WSfnB0o(Hb?@70+RV6?pM$(KlNqALVD%)*% zPk#LwInEniLI~kOaELC%SiHoTKEoW(HuBdJ(lTJ~wGG65h@Qv~{H|Xm`LQUDap@v7 zk}qEb6>DGUM^BZ5TTsIXh=zfCyl#5=}Vkk=k9L-xo5p4Zo1 zVFC90eQ!7%`pOofsra*GtE6Hy8sX&uqFt}o2ht+8k$gzd4Jl$B_TksyX_$~tWX z^ZDFSHHLKp&^Ei>PJPv&Mac@=%x1ID`x!7m0Y7XgSe&?7?mXcUyAZa~eiaiI+vIw^ zmQ7m~w4+@JH&JfV*Kv|KVKsE`@W>ez@fUi-$U1-)L3>1@Y4m)DWiDW`BI0x=&{~+2 z$)t!yq}~VeXHVKFoc=p->F6XsolZ@VN2gpS&H)h7hRcmE@`uC01o?~j*_g>5sgRw# zJf6o%YT(Y}yt+i+D?QkvLq0xvd#@q{iLX|xJiT0nI2P>vtB+Mu#5C#La2gkb7D3|J z%Qf2tE%FQEKIu`)8~#~*{VjY5FGGF!#9dPIrxW%dA$wPe03Z~uwz#j5kZ@ZhqB2~N@B!t2g!~)lf5smH1_16d0YCCO RoQnVe002ovPDHLkV1oLQY|sDz literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/assets/imgs/W8.png b/XixunPlayer/app/src/main/assets/imgs/W8.png new file mode 100644 index 0000000000000000000000000000000000000000..a3394db7f17e4ce4627882ec7aacf52c7b223244 GIT binary patch literal 829 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 literal 0 HcmV?d00001 diff --git a/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/EleVideo.java b/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/EleVideo.java index ed044fa..f15c370 100644 --- a/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/EleVideo.java +++ b/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/EleVideo.java @@ -23,11 +23,13 @@ public class EleVideo extends TextureView implements TextureView.SurfaceTextureL IjkMediaPlayer ijkPlayer; ExoPlayer exoPlayer; long bitRate; + boolean isLive; - public EleVideo(Context context, String path, float vol) { + public EleVideo(Context context, String path, float vol, boolean isLive) { super(context); this.path = path; this.vol = vol; + this.isLive = isLive; initIjk(); } @@ -59,7 +61,7 @@ public class EleVideo extends TextureView implements TextureView.SurfaceTextureL release(); initExo(); } - if(isShown()) start(); + if(isShown() || isLive) start(); }); ijkPlayer.prepareAsync(); } catch (Throwable e) { @@ -127,7 +129,10 @@ public class EleVideo extends TextureView implements TextureView.SurfaceTextureL @Override public void onVisibilityAggregated(boolean isVisible) { super.onVisibilityAggregated(isVisible); - if(isVisible) start(); + if(isVisible) { + start(); + if(isLive) ijkPlayer.setVolume(vol, vol); + } else if(isLive) ijkPlayer.setVolume(0, 0); else pause(); } } \ No newline at end of file diff --git a/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/MainActivity.java b/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/MainActivity.java index d372637..040342f 100644 --- a/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/MainActivity.java +++ b/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/MainActivity.java @@ -18,6 +18,7 @@ import android.os.Environment; import android.os.IBinder; import android.os.RemoteException; import android.os.StatFs; +import android.os.StrictMode; import android.view.Choreographer; import android.view.View; import android.webkit.WebView; @@ -78,6 +79,8 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra ins = this; startService(new Intent(this, RestartService.class)); + StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build()); + if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) init(); else { Util.println("---- No permission, Try again ..."); @@ -142,7 +145,7 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra intentFilter.addDataScheme("file"); registerReceiver(new BroadcastReceiver(){ long lastMs; - char [] pass = {'8','8','8'}; + final char[] pass = {'8','8','8'}; @Override public void onReceive(Context context, Intent intent) { var path = intent.getData().getPath(); @@ -167,16 +170,12 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra } if(progJson==null) { Util.println("No program File"); - runOnUiThread(() -> { - Util.makeText(MainActivity.this, "No program File").show(); - }); + runOnUiThread(() -> Util.makeText(MainActivity.this, "No program File").show()); return; } if(size==0) { Util.println("zip size is 0"); - runOnUiThread(() -> { - Util.makeText(MainActivity.this, "zip size is 0").show(); - }); + runOnUiThread(() -> Util.makeText(MainActivity.this, "zip size is 0").show()); return; } Util.deleteFiles(size, null); @@ -189,9 +188,7 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra }); } catch (Exception e) { Util.printStackTrace(e); - runOnUiThread(() -> { - Util.makeText(MainActivity.this, Util.toStr(e)).show(); - }); + runOnUiThread(() -> Util.makeText(MainActivity.this, Util.toStr(e)).show()); } }).start(); } @@ -238,14 +235,14 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra var code = intent.getIntExtra("code", 0); Util.println(" remote_control "+code); if(progView == null || code > progView.pages.size()) return; - if(! progView.avas.isEmpty()) page(curAva).hide(); + if(! progView.avas.isEmpty()) page(progView.curAva).hide(); var millis = (System.currentTimeMillis()+999)/1000*1000; if(code > 0) { progView.avas.clear(); progView.avas.add(code-1); - curAva = 0; - curTimes = 1; - waitTo = 0; + progView.curAva = 0; + progView.curTimes = 1; + progView.waitTo = 0; //点播 var page = page(0); page.setMillis(millis); if(state != 6) { @@ -253,7 +250,7 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra state = 6; } } else { - waitTo = Long.MAX_VALUE; + progView.waitTo = Long.MAX_VALUE; syncProg(millis); } } catch (Throwable e) { @@ -360,8 +357,6 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra } Choreographer choreographer = Choreographer.getInstance(); - int curAva, curTimes = 1; - long waitTo = Long.MAX_VALUE; boolean canAdd = true; @Override @@ -372,34 +367,34 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra } var milli = System.currentTimeMillis(); if(progView.avas.isEmpty()) { - if(milli >= waitTo) { - waitTo = Long.MAX_VALUE; + if(milli >= progView.waitTo) { + progView.waitTo = Long.MAX_VALUE; Util.println("wait sync"); syncProg(milli); } } else { - var lastPage = page(curAva); + var lastPage = page(progView.curAva); if(milli >= lastPage.endMilli) { lastPage.hide(); - if(waitTo>0) { //waitTo==0 为点播,不换页 - if(curTimes < lastPage.repeatTimes) curTimes++; + if(progView.waitTo > 0) { //waitTo==0 为点播,不换页 + if(progView.curTimes < lastPage.repeatTimes) progView.curTimes++; else { - curTimes = 1; - curAva++; - if(curAva >= progView.avas.size()) { + progView.curTimes = 1; + progView.curAva++; + if(progView.curAva >= progView.avas.size()) { var isDiff = milli-lastPage.endMilli>=1000; if(Util.buf.length()>1000000) Util.buf.replace(0, 100000, ""); Util.println("isDiff: "+isDiff+" endMs: "+lastPage.endMilli+" millis:"+milli); syncProg(isDiff ? milli : lastPage.endMilli); - Util.println("after. curAva: "+curAva+" endMs: "+page(curAva).endMilli); + Util.println("after. curAva: "+progView.curAva+" endMs: "+page(progView.curAva).endMilli); choreographer.postFrameCallback(this); canAdd = false; return; } } } - page(curAva).setMillis(lastPage.endMilli); - Util.println("curAva: "+curAva+" endMs: "+page(curAva).endMilli); + page(progView.curAva).setMillis(lastPage.endMilli); + Util.println("curAva: "+progView.curAva+" endMs: "+page(progView.curAva).endMilli); } else { for(var layer : lastPage.layers) { for(var src : layer.srcs) { @@ -425,36 +420,42 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra } void syncProg(long milli) { - curTimes = 1; + progView.curTimes = 1; progView.avas.clear(); var dur = 0; - for(int i=0; i hases = null; @@ -557,7 +558,7 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra writer.append("\n"); writer.append(" Launch: ").append(Fmt.format(launchMilli)).append("\n"); writer.append(" Sync: ").append(Fmt.format(syncMs)).append("\n"); - writer.append("Page End: ").append(progView==null || progView.avas.isEmpty() ? "0" : Fmt.format(page(curAva).endMilli)).append(" CurPage: ").append(String.valueOf(curAva)).append(" / ").append(progView==null || progView.avas.isEmpty() ? "0" : String.valueOf(progView.avas.get(curAva))).append("\n"); + writer.append("Page End: ").append(progView==null || progView.avas.isEmpty() ? "0" : Fmt.format(page(progView.curAva).endMilli)).append(" CurPage: ").append(String.valueOf(progView.curAva)).append(" / ").append(progView==null || progView.avas.isEmpty() ? "0" : String.valueOf(progView.avas.get(progView.curAva))).append("\n"); writer.append(" Current: ").append(Fmt.format(System.currentTimeMillis())).append("\n"); var statFs = new StatFs(Environment.getExternalStorageDirectory().getPath()); writer.append(" Disk: ").append(String.valueOf(statFs.getTotalBytes()/1000000)).append(" ").append(String.valueOf(statFs.getAvailableBytes()/1000000)).append(" ").append(String.valueOf(statFs.getFreeBytes()/1000000)).append(" (total avail free)\n"); @@ -573,7 +574,7 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra var latch = new CountDownLatch(1); runOnUiThread(() -> { if(progView!=null && ! progView.avas.isEmpty()) { - var page = page(curAva); + var page = page(progView.curAva); for(var layer : page.layers) for(var src : layer.srcs) if(src.view.getVisibility()==VISIBLE) { try { if(src.view instanceof EleVideo) { @@ -600,6 +601,9 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra writer.append("getPlaybackParameters: ").append(String.valueOf(view.exoPlayer.getPlaybackParameters())).append("\n"); } writer.append("\n"); + } else if(src.view instanceof SrcWeather) { + var view = (SrcWeather) src.view; + writer.append("SrcWeather html: ").append(view.html).append("\n"); } else if(src.view instanceof WebView) { var view = (WebView) src.view; writer.append("Title: ").append(view.getTitle()).append("\n"); @@ -624,10 +628,7 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra if(files == null) return; Arrays.sort(files, (f1, f2) -> (int) (f2.lastModified() - f1.lastModified())); var writer = new OutputStreamWriter(out); - for(var file : files) { - var len = file.length(); - writer.append(file.getName()).append(' ').append(String.valueOf(file.length())).append('\n'); - } + for(var file : files) writer.append(file.getName()).append(' ').append(String.valueOf(file.length())).append('\n'); writer.append('\n'); writer.flush(); } else if("GetFile".equals(_type)) { @@ -644,19 +645,15 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra Util.println(emsg); continue; } - MainActivity.ins.runOnUiThread(() -> { - Util.makeText(MainActivity.this, Util.toStr(e)).show(); - }); + MainActivity.ins.runOnUiThread(() -> Util.makeText(MainActivity.this, Util.toStr(e)).show()); Util.printStackTrace(e); } finally { O.close(in, out); - Util.println("conn end\n\n"); + Util.println("conn end\n"); } } } catch (Throwable e) { - MainActivity.ins.runOnUiThread(() -> { - Util.makeText(MainActivity.this, Util.toStr(e)).show(); - }); + MainActivity.ins.runOnUiThread(() -> Util.makeText(MainActivity.this, Util.toStr(e)).show()); Util.printStackTrace(e); } } diff --git a/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/Prog.java b/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/Prog.java index 7740973..b4377c1 100644 --- a/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/Prog.java +++ b/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/Prog.java @@ -3,6 +3,7 @@ package com.xixun.xixunplayer; import android.annotation.SuppressLint; import android.content.Context; import android.net.Uri; +import android.speech.tts.TextToSpeech; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -24,6 +25,8 @@ public class Prog extends AbsLayout { ArrayList pages = new ArrayList<>(); ArrayList avas = new ArrayList<>(); + int curAva, curTimes = 1; + long waitTo = Long.MAX_VALUE; public Prog(JSMap task, Context context) { super(context); @@ -163,16 +166,30 @@ public class Prog extends AbsLayout { imgView.setScaleType(ImageView.ScaleType.FIT_XY); src.view = imgView; } - } else if(src.type.equals("MultiPng") || src.type.equals("SplitText")) { + } else if(src.type.startsWith("MultiPng") || src.type.equals("SplitText")) { JSList imgs = source.jslist("arrayPics"); if(imgs.isEmpty()) continue; - if(imgs.size()==1 && imgs.get(0).intg("picDuration")==0) src.view = new EleScroll(context, imgs.get(0)); - else { + var mode = source.str("curchange"); + var hasTTS = src.type.endsWith("Audio"); + var speechRate = (float) source.dbl("voiceRate"); + if(mode!=null ? mode.endsWith("roll") : (imgs.size()==1 && imgs.get(0).intg("picDuration")==0)) { + var img = imgs.get(0); + src.view = new EleScroll(context, img); + if(hasTTS) { + src.text = img.str("text"); + if(src.text!=null) { + src.tts = new TextToSpeech(context, (int status)->{ + Util.println("status: "+status+" "+(status==TextToSpeech.SUCCESS)); + }, "com.iflytek.speechcloud"); + src.tts.setSpeechRate(speechRate); + } + } + } else { var start = src.startTime; var ele0 = src; for(var map : imgs) { var picDur = map.intg("picDuration")*1000; - if(picDur==0) continue; + if(picDur==0) picDur = timeSpan / imgs.size(); src.type = "Image"; src.startTime = start; src.endTime = start = src.startTime + picDur; @@ -185,6 +202,15 @@ public class Prog extends AbsLayout { src.isEntryRand = ele0.isEntryRand; src.isExitRand = ele0.isExitRand; } + if(hasTTS) { + src.text = map.str("text"); + if(src.text!=null) { + src.tts = new TextToSpeech(context, (int status)->{ + Util.println("status: "+status+" "+(status==TextToSpeech.SUCCESS)); + }, "com.iflytek.speechcloud"); + src.tts.setSpeechRate(speechRate); + } + } var imgView = new ImageView(context); imgView.setImageURI(Uri.fromFile(new File(Util.programDir + "/" + map.stnn("id")))); imgView.setScaleType(ImageView.ScaleType.FIT_XY); @@ -199,9 +225,12 @@ public class Prog extends AbsLayout { } else if(src.type.equals("DigitalClock")) src.view = new SrcDigitalClock(context, source); else if(src.type.startsWith("DigitalClock")) src.view = new SrcDigiClock(context, source); else if(src.type.equals("AnalogClock")) src.view = new SrcAnaClock(geo.width, geo.height, Util.programDir + "/" + id, source, context); - else if(src.type.equals("Audio")) src.view = new EleVideo(context, Util.programDir + "/" +id, source.intg("vol", 100) / 100.0f); - else if(src.type.equals("Video")) { - var key = id + src.startTime + src.endTime; + else if(src.type.equals("Audio")) src.view = new EleVideo(context, Util.programDir + "/" +id, source.intg("vol", 100) / 100.0f, false); + else if(src.type.endsWith("Video")) { + var isLive = src.type.startsWith("Live"); + var url = source.str("url"); + if(isLive && url==null) continue; + var key = isLive?url:id + src.startTime + src.endTime; var videoView = videoMap.get(key); if(videoView!=null) { var geoOld = (AbsLayout.LayoutParams) videoView.getLayoutParams(); @@ -212,7 +241,7 @@ public class Prog extends AbsLayout { src.view = new SrcCopy(context, videoView); ((SrcCopy) src.view).scaleX = 0; } else { - src.view = new EleVideo(context, Util.programDir+"/"+id, source.intg("vol", 100) / 100.0f); + src.view = new EleVideo(context, isLive ? url : Util.programDir+"/"+id, source.intg("vol", 100) / 100.0f, isLive); videoMap.put(key, (EleVideo) src.view); } } else if(src.type.equals("WebURL")) { @@ -229,6 +258,7 @@ public class Prog extends AbsLayout { else if(src.type.equals("Timer")) src.view = new SrcTimer(context, source); else if(src.type.equals("Countdown")) src.view = new SrcCountdown(context, source); else if(src.type.startsWith("Environ")) src.view = new SrcEnviron(context, source); + else if(src.type.startsWith("Weather")) src.view = new SrcWeather(context, source); else if(src.type.startsWith("MultiLineText")) src.view = new SrcSensor(context, source); else continue; if(src.view==null) continue; @@ -278,6 +308,7 @@ public class Prog extends AbsLayout { setVisibility(GONE); View view; for(int cc=0; cc imgs = source.jslist("arrayPics"); if(imgs.isEmpty()) continue; for(var img : imgs) { diff --git a/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/SrcEnviron.java b/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/SrcEnviron.java index 06e03e6..4c70ba5 100644 --- a/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/SrcEnviron.java +++ b/XixunPlayer/app/src/main/java/com/xixun/xixunplayer/SrcEnviron.java @@ -112,7 +112,7 @@ public class SrcEnviron extends View implements Choreographer.FrameCallback, Int item.nums.add(img); } } else { - var num = ((Number) method.invoke(intent, item.key, -999)).doubleValue(); + var num = ((Number) method.invoke(intent, item.key, -999)).floatValue(); var str = num==-999 || (num==-1 && ! item.key.endsWith("rature")) ? "--" : NumFmts.zz().format(num); for(int cc=0; cc"; + hasAQI = html.contains("%{aqi}"); + hasCur = html.contains("%{current}") || html.contains("%{arr.0."); + hasDays = html.contains("%{arr."); + + nextMs = System.currentTimeMillis() + 1800000; + refresh(); + } + + public void refresh() { + try { + var htm = html; + if(hasAQI) { + try { + JSList aqiForecast = JSMap.fromClose(new URLConn("https://www.ledokcloud.com/weather/whapi/json/alicityweather/aqiforecast5days").writeJson("{\"cityId\":"+code+"}").in()).jsmap("data").jslist("aqiForecast"); + htm = htm.replace("%{aqi}", aqiForecast.get(1).stnn("value")); + } catch (Exception e) { + Util.printStackTrace(e); + } + } + String type = null; + if(hasCur) { + try { + var condition = JSMap.fromClose(new URLConn("https://www.ledokcloud.com/weather/whapi/json/alicityweather/condition").writeJson("{\"cityId\":"+code+"}").in()).jsmap("data").jsmap("condition"); + htm = htm.replace("%{current}", condition.stnn("temp")); + htm = htm.replace("%{arr.0.type}", type = condition.stnn("condition")); + htm = htm.replace("%{arr.0.fx}", condition.stnn("windDir")); + htm = htm.replace("%{arr.0.fl}", condition.stnn("windLevel")); + } catch (Exception e) { + Util.printStackTrace(e); + } + } + if(hasDays) { + try { + JSList days = JSMap.fromClose(new URLConn("https://www.ledokcloud.com/weather/whapi/json/alicityweather/forecast15days").writeJson("{\"cityId\":"+code+"}").in()).jsmap("data").jslist("forecast"); + int lastEnd = 0, appendIdx = 0; + var buf = new StringBuilder(htm.length()*3/2); + int start; + while((start = htm.indexOf("%{arr.", lastEnd)) > -1) { + int idxS = start+6, idxE; + try { + if(htm.charAt(idxS+1)=='.') idxE = idxS+1; + else if(htm.charAt(idxS+2)=='.') idxE = idxS+2; + else { + lastEnd = idxS; + continue; + } + var dd = Integer.parseInt(htm.substring(idxS, idxE))+1; + if(dd>=days.size()) { + lastEnd = idxE+1; + continue; + } + int fds = idxE+1, fde = idxE+2; + for(; fde<=fds+16; fde++) if(htm.charAt(fde)=='}') break; + if(fde > fds+16) { + lastEnd = fds; + continue; + } + var fd = htm.substring(fds, fde); + String replace = null; + if(fd.equals("date")) replace = days.get(dd).stnn("predictDate"); + else if(fd.equals("type")) replace = days.get(dd).stnn("conditionDay"); + else if(fd.equals("high")) replace = days.get(dd).stnn("tempDay"); + else if(fd.equals("low")) replace = days.get(dd).stnn("tempNight"); + else if(fd.equals("fx")) replace = days.get(dd).stnn("windDirDay"); + else if(fd.equals("fl")) replace = days.get(dd).stnn("windLevelDay"); + else if(fd.startsWith("img-")) { + var parts = Txts.split(fd, "-", 1); + String w = "32", h = "32"; + if(parts.size()>=3) { + w = parts.get(1); + h = parts.get(2); + } + replace = ""; + } + lastEnd = fde+1; + if(replace!=null) { + buf.append(htm, appendIdx, start).append(replace); + appendIdx = lastEnd; + } + Util.println("Found: " + htm.substring(start, lastEnd)+" dd "+dd+" fd "+fd); + } catch (Exception e) { + lastEnd = idxS; + Util.printStackTrace(e); + } + } + if(buf.length()>0) { + if(appendIdx < htm.length()) buf.append(htm, appendIdx, htm.length()); + htm = buf.toString(); + } + } catch (Exception e) { + Util.printStackTrace(e); + } + } + loadDataWithBaseURL(null, prefix+htm+"", "text/html", "UTF-8", null); + } catch (Exception e) { + Util.printStackTrace(e); + } + } + + static HashMap dayImgMap = new HashMap<>(); + static HashMap nitImgMap = new HashMap<>(); + + static{ + dayImgMap.put("晴", "0"); + dayImgMap.put("大部晴朗", "0"); + dayImgMap.put("多云", "1"); + dayImgMap.put("少云", "1"); + dayImgMap.put("阴", "2"); + dayImgMap.put("阵雨", "3"); + dayImgMap.put("局部阵雨", "3"); + dayImgMap.put("小阵雨", "3"); + dayImgMap.put("强阵雨", "3"); + dayImgMap.put("阵雪", "13"); + dayImgMap.put("小阵雪", "13"); + dayImgMap.put("雾", "18"); + dayImgMap.put("冻雾", "18"); + dayImgMap.put("沙尘暴", "20"); + dayImgMap.put("浮尘", "29"); + dayImgMap.put("尘卷风", "29"); + dayImgMap.put("扬沙", "29"); + dayImgMap.put("强沙尘暴", "20"); + dayImgMap.put("霾", "45"); + dayImgMap.put("雷阵雨", "4"); + dayImgMap.put("雷电", "4"); + dayImgMap.put("雷暴", "4"); + dayImgMap.put("雷阵雨伴有冰雹", "5"); + dayImgMap.put("冰雹", "5"); + dayImgMap.put("冰针", "5"); + dayImgMap.put("冰粒", "5"); + dayImgMap.put("雨夹雪", "6"); + dayImgMap.put("小雨", "7"); + dayImgMap.put("中雨", "8"); + dayImgMap.put("大雨", "9"); + dayImgMap.put("暴雨", "10"); + dayImgMap.put("大暴雨", "10"); + dayImgMap.put("特大暴雨", "10"); + dayImgMap.put("小雪", "14"); + dayImgMap.put("中雪", "15"); + dayImgMap.put("大雪", "16"); + dayImgMap.put("暴雪", "17"); + dayImgMap.put("冻雨", "19"); + dayImgMap.put("雪", "15"); + dayImgMap.put("雨", "8"); + dayImgMap.put("小到中雨", "7"); + dayImgMap.put("中到大雨", "9"); + dayImgMap.put("大到暴雨", "10"); + dayImgMap.put("小到中雪", "15"); + dayImgMap.put("无天气类型", "unknown"); + + nitImgMap.put("晴", "30"); + nitImgMap.put("大部晴朗", "30"); + nitImgMap.put("多云", "31"); + nitImgMap.put("少云", "31"); + nitImgMap.put("阴", "2"); + nitImgMap.put("阵雨", "33"); + nitImgMap.put("局部阵雨", "33"); + nitImgMap.put("小阵雨", "33"); + nitImgMap.put("强阵雨", "33"); + nitImgMap.put("阵雪", "34"); + nitImgMap.put("小阵雪", "4"); + nitImgMap.put("雾", "32"); + nitImgMap.put("冻雾", "32"); + nitImgMap.put("沙尘暴", "36"); + nitImgMap.put("浮尘", "35"); + nitImgMap.put("尘卷风", "5"); + nitImgMap.put("扬沙", "35"); + nitImgMap.put("强沙尘暴", "36"); + nitImgMap.put("霾", "46"); + nitImgMap.put("雷阵雨", "4"); + nitImgMap.put("雷电", "4"); + nitImgMap.put("雷暴", "4"); + nitImgMap.put("雷阵雨伴有冰雹", "5"); + nitImgMap.put("冰雹", "5"); + nitImgMap.put("冰针", "5"); + nitImgMap.put("冰粒", "5"); + nitImgMap.put("雨夹雪", "6"); + nitImgMap.put("小雨", "7"); + nitImgMap.put("中雨", "8"); + nitImgMap.put("大雨", "9"); + nitImgMap.put("暴雨", "10"); + nitImgMap.put("大暴雨", "10"); + nitImgMap.put("特大暴雨", "10"); + nitImgMap.put("小雪", "14"); + nitImgMap.put("中雪", "15"); + nitImgMap.put("大雪", "16"); + nitImgMap.put("暴雪", "17"); + nitImgMap.put("冻雨", "19"); + nitImgMap.put("雪", "15"); + nitImgMap.put("雨", "8"); + nitImgMap.put("小到中雨", "7"); + nitImgMap.put("中到大雨", "9"); + nitImgMap.put("大到暴雨", "10"); + nitImgMap.put("小到中雪", "15"); + nitImgMap.put("无天气类型", "unknown"); + } + long nextMs; + + @Override + public void onVisibilityAggregated(boolean isVisible) { + super.onVisibilityAggregated(isVisible); + if(isVisible) { + var ms = System.currentTimeMillis(); + if(ms>=nextMs) { + nextMs += 1800000; + refresh(); + } + } + } +}