From 3d2cbba8896088edf69301c635b509353e9139ae Mon Sep 17 00:00:00 2001 From: 15972095207 <2484216370@qq.com> Date: Wed, 24 Dec 2025 14:40:17 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...便签泛读、标注和维护报告.docx | Bin 474850 -> 478058 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/小米便签泛读、标注和维护报告.docx b/doc/小米便签泛读、标注和维护报告.docx index 58a4fd91d7b71268433bc1e7d4e62f75f3c3bd17..9c5d5b00a4023ebebbdcae9b0df4f5c4db923e51 100644 GIT binary patch delta 27019 zcmZUZV|OK5)TLwFwv&o^V%xTDtCADjwo|cf+qNpUQ*rvf-J?JB=zp-W_Fi*6bN>Az zxJVG= zjBwOZ(h@hds5hE!H2%_l@SBLc9&fN@O-pG=9#4w@X(Sc8Q2ic!0Zjt&f+?YuMPcD+ z5Gv?e@XGVQDa-$!0p?6wNW|%mr~vXm%rFQ{BqXc#So390oPchQBi8HkhJse_uddjkDyCOH5 zYz3^x(oeHDCDwexDMf`p$*b#;zgaj&Sp!HlLrny%Q)SNlbjUpUl=0ldW%CfYbSg8r z0|AGiZw*IkMOv*2oMRyT$Uw4~2~(9zAvjKh7}8}rJ*QQ*lGGyM)h1InAhxs5RpHp z64|92A0*C_?b(AGj)bDZ-NYUsF6!FPyyWSeJ~N-`NsP)&S|1s1^#sEP`NMn3Hc^DR z{oC2F;2s1!#7y8B6u6!SYP1MP%Wz>Tb%SF%LFInvyhu7xDS$KrM?}2?!2mM>9-MrS zkdSp_4U<+i2mUj#!*80Za=fhOIJDx-9`->s8CfA#A8cq)!6W&8V@J-j_QGq6CKk{Xbsb6_$oaiZ&Rt+Ecs(5=22icMcnfK-=UNfA@J;y!Isz8EvV zYxP7B(MrwmjF&SnRb@aim=;69W=&wVfj0_RWK2m! z06I7YL+8&UX<{mbI?HAfvtMJjl%1e25nfTHte3gC(+i5w#=hCEpszx@Hjzt^<4Y2i z6<{sYuTv4p7tdE0HnZ0QlN31y@iAh z^O<-AQ06ePL>8>Prb?Syj}MH-GnF+k%gCia=90)1UuFECF8?H-hINx%!BvdP+vB_(F`Ff{w7F2vH#<@C{}W7spUc#3fc zGLZ_UjwvAuS+ro)gnPJB37WeT(NOTr%7gs%ThBMnvhKKAL2Chc?-DhvEIp&Ov zY<4{}cN-=^=urEf(0x($g8bnskjT_Z&maq9oUXY@F z1QjyR_>c{G;HzFXs{~-p`}{Sz&|()ojXLg6^q=3GCRfpY@5w|kFv-sZ)ZZHZ^tsi( zJZ%{o&aJKHk&qWPKBN0wY

YyUt9BUfs^BaWWQKyj&?ZZ@fIjJPzS5fL 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 FzW{{_rE~xQ -- 2.34.1 From 26bf15d29bb470d6b0d8e7156c074357efd4226f Mon Sep 17 00:00:00 2001 From: 15972095207 <2484216370@qq.com> Date: Wed, 24 Dec 2025 14:42:10 +0800 Subject: [PATCH 2/6] 1 --- ...便签泛读、标注和维护报告.docx | Bin 478058 -> 478061 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/小米便签泛读、标注和维护报告.docx b/doc/小米便签泛读、标注和维护报告.docx index 9c5d5b00a4023ebebbdcae9b0df4f5c4db923e51..0b88b313d0a1e61cc0dc4cf0bfebd756ba1e7cc1 100644 GIT binary patch delta 6716 zcmZ8mbx_pb-ri+lmuBgdknToe>Fz~Z0Z9p^OAz?dEe#6@!qQ!Wq_iLi0#ZLIN$Hl5 ze7X0J_rCW%GtWHd%;%Z;JZI)}W7Yc@p7`4>_U0$Ivb_Ovq*$? ziSDy-qg>o*i-|FSo9DYB?!Y=Y{}XS5b29 zfe7nRZ>pVaCTbS-dvDptrln9hGF1k_<>vN%3|x-E%mNTZRpE0p28{qc3s3v*y*KHB z{KNs}9%))Z<5Q{(#e;~nwtewu_xybw-z584$%k$wD0L-!AqHB~0Nva151F5ZdOkbgpD zd1CTy@t(&oZ)LQ#)y38M$Lqs89a8lLk4*t=+B|NEVjLUiJy0k#?K4*Rp|q7&;f^fjX3WEUjP{R|oxop+S=Z z5?Gcg(SGKMR9Y0(N~wMisZRgK6^bLt}272g=gvnAjKLYPRbM9 ze9E!z(VuBPZWWPZ7-Gt$O0~+gAuV*Dq4O(axdi<|E3tfTC3DC>=SGBQ!R;X_MDwtD z+RRvckDORd{_8VHh@LI67eOsUK*u;K_QE9A_tCk^+AGB=IWl62?h|ZQIu-T%6UVRO zCCw^MsfoOl0Dk#yWbZg4FTwI$TQc(Y4w>Vpm&&TV%j~o2(vTmNTUI!^_F;!K_b=UV zeVQRL-H0Crevqvk_|8$rr!=y#B`oQo`CalWxCREYRc?kxK=fUz(jGV(%|Lj?TDjLC z6dwxyDT*Ort0yEGk@}SpQvZsP8&3<#Ym=7y2r)P)&xoAmp5ojhvx?LasM4|5c5K;%W=|+#tGPP2&zFbI7-&WJxWyGQb?8NbSiL+ z#rTzyRUi+d>eGFrXZaRlh+D)By~c&R^{tLo1{MP9PUe8y zaS^hYvx^gQplooKWfLYvHbVP^>X~yJZQCtOG%D3NtN{QOHWc(=k$QRSY$%a1Ggw~_ znm()P^x}Sb5mnG5UO|q9jf=lt6O)3b=~#&0As{})FV#5=&kM0*bc-CqEs_kXGVLIG zdfLitRFIi-_2a76v2sfN602vd3TRLJud>OszOI_+87V)FY;o0QYO8{yZf5R|+l zc2$MDoKYAShAl-|+l=9mOv@Yey!uE0G)oDRqK9DTe7(tgV-8<@A5S7-LGkQdBpW2e zHMB%;ZL!7Acx7cr#*X`y!y58@i;+xXk%jOl(*Pd9#y*Vt%W+A*1Ea%eg`8N(oanN@ zo8L-j!%J=R6gz6;lJn&#QJ|iXILT1aMrR_r&(bbE@{6qePnTgXdK$T?qP9X^S4w;p z<0vy%)H%{fegH{j>NJ6^Y#|i&h<|>Qa*w-ZZ?aRM9RHDr9Nv|*L78X8x-r*WL*MuB zpUq!J1q!yCucH_D>KMnV&8H+du)Ht{Y1)VpmT1+)og{D|u&yMK12}+EZL1nny#*!v z3O+ilq}rHC_eYJx`Dr;43CT|>$thx0>fV%$aEJ0(&(SMrH`u0gUIit>B^V7!)Y=FM z?3&}!PD0CuH3UA!5F08_`vJ~qw7%)OOv`Tf0)4jtzH~ID1za5JamO317=_xIi5!ciC( zYni#u62H<%B*WyJUx0hk#wL%Roay3oIM}}-z{WQZ?n$w9P)W)6T67S_EO6504vxd- z$E7@?Q-A^tKAeBQDH1-i<~lUW-L2i*Z02&U`N^%jfA&Q>&1f7hf<3LXGQt-fTU|;) zJiA73{(o|5$aUc+>|TX7ld*yy@g)i67v#!C7`^$DL=InQA?h--oM}| zJ#GDAZ^!+%f7oQG?m2ES4=o)W()K7E*PhF^(m)H)TS3b8K59Kl{__Gxz6bXfVUL`5 zeh2qJjA^LkbKx6km(>NNu0}pR2E8>E$Wc|ZI$I{xUmC|ZqW3Y(bqa5)-OQDGHJ^xj zMS1s=p#WMy9E+PK!Pa8KLSe(8z-${_6kSEXY=I9G=@U_K2!~C)@03lGnh_9%CiOlQ zH0%I~BvXr?HuxL#u`eCmn^Eb6=U}JF(J&EF1*hFI6{{7|wOwAnM%wX-D`$|`?UoB5 z1z36vFeFZrut;9@GWlwTeCBD#$5$pdgp&n;sPX9}$ep8!*CIcOz1)wW{r*w)eE0Jo z%2=VoY$5DDblk>r)HtDp&djmcHDmG?8>|<&#IxCVn>7QVh3agk_YaPUBsJN8Y^+Zi z`_XaVJXgH=*ISZnqByTdQeJ>A?=iELhcg;b$?n+@?1woy6o3tI+{-h$mW=B&hx5is z?RG1@W+ZcT=<%}HzjJml$}{JS%RO?c;JRM(=qoDZq^>j>Sf(>rdNgI4Dk{Z$$`?NK zK8WpG$#<-azYQtD-eF9#0pLA5L%<{Sx4%|7?RY@+RrXw*}{Z)jeq~mN<{cB4OsCx%ozAFLt*ob#_<_% zQ=CGf%h|!f*=2Rpti`MSkKAHEIItpRQfK;8F<$TjL)B&KO``Kt&E<u(Mq@bwR?4Nm#|V23Tt)EQ$U?Eq$=?tE-d$Qw=kD zk>CjR7paTT;qno|VUm~|{e za40J&Ac&3lRq1ag5MDe*DkJ9~`or063z0y9XX0cJF~dkxKp(Z*T&6N{yWxFOL<&HP zjHxaa4aBLNpeoa##vH6470{w-#EElU! zrVJ(>+JDP>p;|K6r7@3QiX;?Q3Hs>EQk&kT`{y%pyCb}MkO~JFb4-T^hPKDpN0b1R zW`ON+eXu3Sgc)&SV?{k52}Yt8BU9gLaepiK{o>ZZS9kZ7=F&)u2u_&_mv`{ajB-D$ zx2;;1@pHW6-~}gP;VJXSw0I)8ZF#e z^|X7kS-Q>Ay4@dPqfyX)xQLM}^pvtDhQyO2-@132Emaq<%Rl+mn4RqaeUl)5SI{XT zEU;a~==PoAK$~OGfZ+@EwbI;OzsmGxoRPSu?O;-qbtmzY$xN5#-HpDIY@}9Zi6P|N zH@{&!!?@Zo$eTP`FMXom>Il(gp6qKUUnvkE9#B4YGmB+Te!jHo53Ju2fk2@9dk6@r z3Be=-K|$CLYbMZdD|Y4X)MG17psN(>!OWqa-ZVGW?7075H9cEpOOE6v8j$#Xb8}HY zCOCgBJeotA%(d|v)*(eH9&SZnyw?KhdeJ$CvCQ$#BwXnGS3-0`Gl8J7($^|TI-mx6KB;{ z2@QLCE+!8oA3NcA(Z6G>V%i`c`mLw9B9){`F?08E=9dN$_x;s`f70uJ8eg^%u-NBv zE?y2Z)mJVsNPOqCYKx~yV-a>=*J3SqsD$Kd2#2XdBm&8TNk_9Ua90Slnt=3AgHE)P z%kaNvOA}R3?*u12VS6RYjr58vH`4Zn;n}1M+6YcS#JJ}SN|6U$z5sD+K`kfg8gasN)R9bNO;h|o|=KJWA82#bBRco3f+p!OjyAtNZ^d@6mfHwf|0avBFP z51#@y`w{GFnHoComtMAJ1+ya@LfgBU_+G=0>Z&Eap6mGxwKmS5>ie#a_!KPEvl8#M zC(4y#pD9!2KgLimYQ-F|opk)2eu%Tyg1!Gws^C?W<;LGAERO2mvC}hcHNebtK$1$A zPq#Np({~?My`9|8G3EuVmx?-vPOn;->u?A;PgaCn^YS>CklQ`S>uQ3IWa*e%EJ=NN09NyWEwt_v&Z0VE zN)-nLnr;SYVMCYz<(oekB*>|P_;R^bY<3B`?0|8P9ZP%3j$JsD z3(+h;i{cr$PQ-1cEu7Iqlf02NOzvZ)fpPgfhE>P#d75=twCD8WrmtyiX2q_zP2uT{ zwbuNBG@byh^yzfc`Ykds)@IGfaN>l1M0aH-Egn&A06jW9zkZGQua@CC2Oiy&B)uns zvZ)DXnwa+m!BI#2eKZ}RR1JB5Y)*%x-mSO$hRO5j&FSL;>>UPOPgXseyr+3+sWa-+ zW5k*HR~~~WzwAk5u`WBKkIaq~$=_WN>Lx{3Vygny0}3LV0R-uEqn0nY^9t{9I4+Jy zaN7#;oSvwCFez-qs$r()8)Oz-+Qirbm}owOryg}oLWv_%`4ik=7j%s7(dQC!jVk*T z{R@<3P^L7lNEKJL82$-t9EoJQCU1^>mV&m36w;eUdJW|dD<$H-ZZ7opZ~CK>AJgwl z3S%#w|$tq)08&ZC)re$r1BrB|bBdS{NMTbHkswY|namlcj@K zOO=8)SMk)Ks%U~*Ty7g_(yX|m$}mk4B%2^$_mwfoZT;HBGuYGdRRjA(d-QUR`2rC>%6SESlP*Y+s1%D(| zZEIh%npzC}Kn78Eh_%bjN{u@R`&IS4zRESUitf1B+^|Vng<^gKTc;E|k)@vu@Lxwlr4E(QeKh=DC5B^*^`m$w`4h1jkg=D1f z`x(Wbj{3Axm22o9CgeM31$9)vm3lM+cs_BR{j_x$IX1cy7QtJZN4a?RK~#J9NtQ%z zz;oR`qOjZ44ht{ixbxoEVtoV~C)qhVCkHw?Ubei5;*!p7hKyOS#0mOB$c$`e(L7Jp z5)q-NSB})P!2t=M%(XQ-*^wA`9lGD^;_U6MXD&9o2yRy$cA`F)Aj1tmZ~IAK0Cv+} z-h+LcerlSvK0l=pTx9qoCp~VaQJd(3!7AvyawN!m3DADi_^Ge$%lkpPws{lA!`$oW z7Ts9(HZO+86nu;~_1qazu3EK`fg7fie0u{^CDm=3zv!=x6N#71CqKv^^f;6W*T+l0 z*`={O2E~Ez5`TT>Rj|r>ijvZ&r-n|5xMk+}cYaGJk@Qf$`4za6aL=$ZdJk$IWr0Dd zF~v=pOq*w=VWMEN3}h8cI>=j@l_gegkH>!Q8B2m4icuCu2ega`+k@w#6$ZXuV0*}& zJSO*`D4ZYq`iODRgiSw#oW$B7M80qRl4CXYM4_*VkIaF)TU=C~X4o+P_Y7BT{fg(; ztYfFBsxOXc&zHM;V|CUy$)g}xc(^$1+tZiSF2OZB(GKsl{GtqWC0~I#2b1Ipf6(l` zm09xV-CCeCa{$sG+4H?FUe5Ps_Bkjf&aLOstlevxk?cx595jBiUtW`>ZA^zGDbDdA z7@?3XZ`i~>9MSfr7WOflMUW?bFdmxSyuSDrb$WVEv(n}CG2etd;Ve`XP47op8=axhjfpsm{{fd85Kn4x0Hw5^^fvx8A2T>MDT z5$n6&>L+4H5>{|Mkf@0!b7yA1mIw+8!ZGV;W_#NQZ~FK?K$7zWzuHS<-al0~W0u|C zk0P~BgUa4Ll|kS)<;^9wPmdqIy3I&*?|}AF(fVw>@=r_d)$rjAu5`R=wY13W)`}k_ zKy6Nd^8}k1cPwk)MYs`K@)%;ZBwX|B2cVvwn%jA4K#w?f=cqqZVOhU0FU{gWJ+p-1 z7HjsVwJFQI;4KpY(D|dgaCw@wq>yr7sU7SctzFy2~v2 z8H7rs%N%0l`#{|U(mDc*pq(bsibE*?FE>v2mcO_;lgvxT`FgT;L9roH~qy_J8{X#{Zwj0u`qIkY)tABTY*8Kw-3($+w}mdM+3$}`|kpM5KKP^;QzHPiwsSe SG?)S^_P?~N zDqamQf~^tR6Jw!q<`R|BBY7coj57zG%x;XESyg^eS!$=>)ss#-m|{g}8=(<*-E
_OdpCgySct!-&ebuTEp%*md?Y>w+d%h4)chD5l*! z>EV{-e#1l3n|o)>Tr809TXwT$1W{cnU}0y!xetxJs(GPQs2hhBgbZmadq{S$?`W5z z!S=0|h+tp)E8N;f?5vBzjm>?mV~8o%1~Dd=f1^B}TW|qJCcjtL^6?ccT{O($y)I$G z;%2#c+$}0ft0ErP{g?a~Jr7bs8nhAZ$utq-LR<2PGF$v$$2%J?UA^)ioy53YNl)MM zJd~DDNSQ0RbDM_s78zn%fg=C;YU)nToZtndf+re}soww!CH916pN(O7o-jKPT=>ej z)ylENKwrpwWJ84?(GlCT2yeWYrF8t<TCz#(#IAn20Ne=q0?S1+s zU{p_f#~<#4L?or6@vC$+lq%t}hwEkA+%Jmx+FzGFlKW}CF&<@1I5rU@`k*%sQk7Nb zkb=<6$lmBEiPVq#Jr0{h8aRz&`*NXW_NEyz7(>c9O5nq~3JH{wK3^0lM6_)o9-iF6 z9xV&7-rxiO13dLkK~c@lKe_j}zAcan%(_h+TCWDCVHUFaHR8d6*`l&rxp5e&Xv--k z8?BS!)Uj?uBhbQxJzGe7D;yQ(Su_sTL zMt`M~vE9GLpE0U@>%|pMK0pK83V{C@`JI{EzHWi=;& z;og54<}>(!N-!hE?I|VlVG55O;Y^i(MipWVGB7apv!V*uv5MQTL1N}4_GTCCy*PXD z-yJF`pecChzhFvu_F<~LqEJ?WARqwPUJ*e)yC{+AR@hK)C*9n*Rf-_@<|u-AcVN4& zX4FSi-*-vZ@A*DAof3`H?(i7}=w|MQ?fk%{h`LJ_xP`vCeRJ+Vnn(ru=|{AC9OX9R zs!L7WT{3+5v7iVxiS*x6s;ppks94sYK(m$#s$8HX1YwYOn{HhMPcgQr;Bk|Se=*I>l<8H?I z$LxwP3fAx;L zFcVa}qxa_MXp;7kCV^fv$`>R@VE^i$(G}(dG4|~NElyK^3P!9i@d-Gs_8@U>Eva5m z3dzK&kHz~3Ix}*d{ghaD%Q7rUP1&-49+}XnK1!xzGL~y9OWqw;!4+Hg*V`I<|zb3M^fW40R6iDW;}&3{#|i#$EJ+=K<@li?-g$ zFhGoTgUj2a-ju&iY~7>&cW?!^Ku}xH>u^QLX{_kJ+l*AR>AThs8JB@7AGV`GZ-hx6C@FHu1UU4VSTH35U0@u1|Ks+b?4&Xc~zZ%XW|rB(dpj z91NsIi5@woPWH^`n~(o>$7E?e5rLGs)zRTh<*Q5o^cF7Svg$ALnsILe&F&|)X*qU) z(xC7-%m`MQmn{lZ#yaTjtQ=;z3}269nn7f`(NjWL*lAS{&N7a6TXrzhZ8Y3ObUDFT z^t?UAA|^sz&$mD$c{i;ZpDjWGl;jZ9;AL>Rlt`2kB;AcgFz}cdIhK!>r$a zL76fIF4&)3WOQsK|Af@gUu~bR^B5ARTMklod@IN|53J*_xY_z$YK|PU6W3OK9--B z7wzh>6nje^%^S>pZ7`}o9(o`YB8-IVWcEW_=~#YI-VstWfmjtRE&x~NBAHbAM6xUr zA&cktS@XYw3ZXuviD8ASNblkAtO>CbIn+`oE{|JnUzpeBGtoye-CF>;`vjZ{%p1d< zOP~C?99uanihYb<1^W6iVdWF|#02w1zahb|HN@WkF!R9_^0UA%a~afQy4+J}DHlO0 z{QD2ons5F~x@5(>qr7H#Jk>LNY#14aX59UE_x9Wzgtp%48+};a zy6@xg=SakL%WA?{EF)yMGy?+d-;Ty1Wv6nPn(-74=Ss=Fp{M)C5XgL*b9R+$V>18&`HsXxQmAdf#*k zJlo1VJfeh>WP?c7}fYQ}hbJBETo(**^x)rQ3By=YzX4_)QYQ{QXxiOx?Th za5BvswB8#xwREDY(r%V_kv5FgpA&qiP5Gy>M51BJ%fzd3wEXjg^e=-RH~5pOkbj%M z)Vr#^N9;kLN0PrNNt{*4(yI1wz4G`sIcr_^=VfqDMJ3J4Q3%HG;;PH$xKoqoNHtk_ zoT}PHq1{-WH()BsCycK`L%HeR=8)R}Luaiu>HXjklHrcF23Zq5FZP~EQ1PnDb8DJB zKctgN^59^pIbAQyRs{or>!^6L*kq27rfvFK%a;=XRruaEI*QAc6PweR#?{FJU{!_s zo<>~O)!JLd;Q51l*V>Os)fSpLM=0idbC=;x%qdZ_WiLl0brUsreBr=>QE zB}ZVuO`opkbuzuWVb4ttAXR0tN#DWM{O5hqZ^_BIVbG5ryUVEcKd0Y9O9jn@@v_g7 zm{*QO4cX)~mcOnlWKp3br_$bdz4Z}Bvms2s{$)vJ)($8b`rO{jp0C?i=-TT>q@cP4 zpXDCD8=Jr6`i~*DUDsCZ#j%Q^k@UM*HT%_&*tMnW=n6v|f6=`L z{xGLCB@V)hW`Se7{x+X=Dc*6_i%M&7^lEVM@@Nwuv@i1wbFnyYBtxLVXk6?zwgNZ5 z9f~MwFL9X#FN-4&Cnay|mwQW#Z)u7moac)W-^Wfx({e8K=IYD&4P+WFcA!BiXmd4Gr&N9Ia)#hYdVmJv^EWYnU-S z|9s3yfCQjgB*CN@Coxc1bKIsGCvs6+u7*`cgR5jBze%Is3o!K(NcPSmCEDw5#;7t@ z7xqVjax3ZVY^htSdtN#fv6331Bl^j6s`<<)n7_k*Fv|1ls;sQ2WDkNz6@>B0;>aY# zfdM~5dO;t{EXiIY{ym{OTLR2ecXpM}({+MI_ zB#U4x%+Xpx%nE(V!sHZuEG6B!0|Kx4*=ag}fAf*Oc^j4h z#3?vKHS}C`@;BDBx1=`mBHb{W1C=K$_Uy7hAtfadS*#i9Ud z=){BWYQc8IW`G}`_%<)xf8nKn;G5<+6a@YuCD&vipSc?aG z2+?;p1E&bvK7eJ<=e}N!eBEw@OQ*vrQ~ARaf%W>y0H{jBz05H)hROS|yz;IY38QMI zmRngo!GhadM99t)fr;9=%^h2?qi#Juez!0g&Zc+E()WZ!F{q8(#iGnJHyCmx3E1i@ z7+wj!v2A-t!E}LyLZt;E>TEwC?otB0D{5w>-_M=ZpNU=IPfyZX+!fTX8_gZuAjA=7 z;x$e-DozCLN}1Yhx6HV3A|TtiQC*kC7-D1U2y2a!-DQ7<^4_#M{9kuZNy%o|#AF=; zIXU4Ky~^M@b=G9lD1zxZMxtV7uzk|wYCUVac5JWx3IeqqEBX(C=hV4(tH{1u0=8(k{teop}-HG35YD zoqNn1PzBNTP%AnzF5fFfGEt*!`%H5VhvC~zf$mQ0vObk!xM-Yl1J z%rkLMt9RtgcP|ct>~h9Ypj=Vz2Q}!`{yILs-6T@Qq!y=-85%eFR?#9;vIgyT)H3vp zp1ZF7>n}jPGH=u?H!fCAwbU6CjZXU~ib4SVO_+~4Ec4;yg+6iK3Fie>opuJ4VMu!^ zuwT~s%$xlr>hO-a&9Rk0_r)TUgbZ^jGi@jp&Ir$m(75#rq`!BGSJW*>=6tsx_jVLh z!2+YZdE_p6O_W6q?Y9m$VVumqK+E%IaM$Cn)bga7zeL*T<{f=Hm}Un6Bh-Hk2_4^M zQU}0)Qc^cEu{FuFu&&EHj8A6y#D?sWt7;y{xkAX?gHl%KTWj4@SBMxC!`up9wZE~N z|C|*RC$U?LiR2nLqFmM?v5q# z)8*84`iVlRPk!a%%XzBc9!b0DMtNgRpeg*ekh0P`_`)Dv-vX6iJ2FT<`6Twdfmb=m zg=&D)tYDJbZROLO=ZJu2Ei~V@wYT8cs}~ynvrt}eJW?(Pdr>uhkJ&+a-(MTL5E6ws z#l##;44++7*3sIKi!k4^-t~{i^aSNJVP@g65TSX?V}r$4&Z04lOebE$4@H?ST_AcM+LChSmovNpZFZrZe04W4TVarge#*cXX;EG#cp#XEd+w~5ax3M) z0s1;2f00gRPT=0n@XAFjY3uW1sqM(pS$ax4vKwruDa}_`BxapFX(!+)c2kue#PIBn z!@Y646zd>x#wKX4YePshZGGYXsCSU`pZ6bue=?`?Jf0M4Sp|}V z{xLLr8V0lpw$jOy78G209zr}LOGKz%g^dm=EXO( z4*6+aOf>dy3sS#-)DbiicTkv=h+7S--w(BnRCoWzlc6&Sd>zH)Pn$b3 z?QGO=K@G2!szDBOiVqqk)dl!ZMo!nG-kx{;{F(aqs957G#nP+N&vn|iOmn3ojMRA& z>)1)0q$QPGm`DA#u2f?mN5>_|qSL3&_s;I`Hrj99JtL3b{V|4@6CSXPm`)qqioVTg zXp^%N(rTYDquCg2u2Js_@#tWADO$N;wu&z+jfv%M8FxT;VCQ=y*812%GIwEP7ah%b z9(>n<=i?H3)r@nG@qhKqkYKHXPqjS^%mzgEX?F1AHn5x!=pNb3dNZ%%$%YexO-9K@ zltSkeb5-KeJ02u?17CMUrtjNJql9&&f z=5;X4{*o_DsQoHHFH7u%#Y~Dny)o}GmW#vF`=n6JZFLQ9wiT(|b9AdAsLku#qDabx z3Mh06_Np})HMLohc|qx3`|PF8@xEV}SJT_XmLO`E5=>ck)fhhgGmLU90L3EBbA@c5 zo07y<1^plU58BR?B!CopphJby4Yd=H#n{12s3K4uKBl?FG-`1@+ghlLci?!>oWMe}v@_BxwbFfU4 zgoUX`P%8pTcO3k7kg)nHnG5gDqs&()2)8^Zib}txq3I^5fRq%&0}udsd<0dK$$?MN z{>P68ibxUs3aE-QQv~zT{P)>}1^^u6006{*|2d9OMT%fHn*S=(Cx_i92crLJ2P~rY z6v0wx{T6YH7L+JCB`_DT4E0$FEDMC9e*I^`MxFm>L863}!LlF|7Ic(73pzP!LK#em z%2ozb18-4{PZr==qRP|Ug_2VNLume=U|{_J<5{ADRKQZ8F;+0@gcVGJnpJs<=#Ros z1xtWHqF@x0D3}bD{M5@RgzD4g8K?l&r~LoZ(PmF4;rUd<|IWV?)u9SzrTH&apByHh c90>ncfyOA18dwrYf|5}Kvp@4t06$s(51zGWg#Z8m -- 2.34.1 From 8dac81cec430e4b8e0049fe04e4dd09d7f11a951 Mon Sep 17 00:00:00 2001 From: 15972095207 <2484216370@qq.com> Date: Wed, 24 Dec 2025 14:46:01 +0800 Subject: [PATCH 3/6] 1 --- ...便签泛读、标注和维护报告.docx | Bin 478061 -> 478079 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/小米便签泛读、标注和维护报告.docx b/doc/小米便签泛读、标注和维护报告.docx index 0b88b313d0a1e61cc0dc4cf0bfebd756ba1e7cc1..7b8c0b4490b0067098788097bfad3ad9ed5588f9 100644 GIT binary patch delta 13471 zcmZX*b8u!s_bnVhv2AN&+t$RkZR?3KF`qb@Oq_{r+t$RklbP`5eQ$mB{qDV|YM=gN z?>fD^YVFgjS9f2g6Md!=)gl4lt4jn=@HD`{1g;x!0DVm46BOH-b-{nyHDF9b`;2LJ zL?Fn5<)gm4_BxAuui}1y24qrRIO`y%)}KJ)vz*{PL^Xp&XH=dzglJhndW`ZkONTK%i;*MXSU zRp{I^RF-tQRN+E(rfdhOH9wp15fyQ4%AuB3VHC@$8%K7n?YorTVR}?d zAd@(TbDJ0mdrbt7=QoselB+8vY^X~8GJdtP{$|JPbN_Qy=vJM1S%zerqE?gG+~G09 zt0()}PZyPVX0&P6d8@MF^=jL2Qx#;QqC{^XvGka(066hj42)*7a!gZ8CG%{1!L+;mTd2%t&*Q@Y zzi(74`|w!(q;5CeCT#bd^!DO^ya*(Ii%kFa`|wN>EKMrSbH$(PMm3#v=5Yx&L+ZQ+ z@^3dADYb-NbUx=d)L9E*dFr#)49Hyu{eUkXI>29AdISTN11ULC_0Z2QU;d_a{zNND zxT4ydxt-E@Z$qfM-2CnHumC4{)C5xu1qGjw9i?RaP2WO zk;UL87pAeOfxTIcS;Z*@lY=^JFHs2d4z0S**>EsO=4A#}EoUAX-#itO{0zAFJx(Ea zLx5w`7jFzwng~eMi_}QV7c$u3eO|oRBly15!pzAfRRxF0n|z8rsx7T!Nnt~h)K>V; za+zP|urwX3P>uH_h*Pk5WmH+u_BFL64`OxP}osEts2UH&cX_)yF)1!%3 zy~77}EqRD?n5JNKVoXOMpkEXMxFyRt!1!x~#PE5lhYDNR1|WRL#gCu6H%NCm2IiES z&$)Hz>j`)Y5l!&#x?XT01?3LJs(sdh$IDi^E5gtYz=yl76gEC%o<9oJ0rh#Bvn$-+ zsZtEO3~F)_w5TE)My1B0uOMS2Ib_9U^rjB8r14O$^c{Ncp5I$Oe4LLHE>p(&SRtya zQr`JUfz8>YFPhWTV@w8-KWM*$h2ToaGTC9Q@NDq7arMPFbd*jvH*5C0gdsyxueKVS z;+hlVscFmPyb*LF-Ke6$uL!ULu-5W3MI9GBPDF=|;k!J1r!ZzT9)xn z@Le*eYj%0)er-+aUbVri`rFU3wh^`Z2(#MP`beA${W1rR=4r~~?<@H>4m1bhw5Xj= zKm~G%$nC7)J05nGQxFX^R|;fPOh=WAFR9dQyVt8W%8S&f-D3iwkcHms#zbxhH_Fxa zTF3L@2T5R;*Y)Ss=fCjje50$keNW=USqTF0h*XN(x+4EFxCPf6vay7sGwW~>QcXB= znB9}asHWUFsr}Q2$NRB_Y3^p-jcVx`U~0duoz=xyT<)d|Nbx!z+Vb$=l}*Ssv3SPu zV*AzOb($M8c_C7muB9oA$whkn!O;Htyl1FJoxWSYr~dho=JH#94X#lw1FzYWaF171 z8(_P~@22mut3!+Z=6$7Qr9qhZV<+@HS1+GR|Dw~&ft+Fh8*pe!i5*&gO0{nW?9U=$ z>d6=|bd|#ubqQd_oUb4J_50#5R)Ds$tMhJY>zx||`g`j8&g=H|W%Lr|f0DMKP@RchG;2?zZPc#h zF8V=1)z$*8<+r+=UP5yOP=&4rt*R&S1x$`~^ZjKaxcWIu@iz=Tv<#?=-xD=9;6CB?y@*U*DnW z8gw2wp!or^a>JZ$bMtF(xen0MYuWC5i>H^~u~nBZKa$~;uM36ArRBR7aHQi6)L@Xu z=A8Ienk`%-xZR%7tvFn2g+H^zjl%nQuX(P2tr-+%If{2AyynY=cqG>&C}5*I z6?5G3GX0DkmT%t_SYoGV^OxrJY2reUxp|RUR(R9Vz66*jE0n@Y%&RYtG{fzTsX7;@ zjYKFFJBJoIkTtyf?%RR~)CU)8EQJhqFNLa?ZY=lXLr4`;|M2+@FD}dZ#PdCT|6+IA zC;a@om9C}do$+kzPQbP|MreA&HUp1^ms6vYKPSWn1P!$_vy8sulL`f#I{Eh`^Pz5= zRj+rs*Q4`S;JZBxGK}-+lqf^&GVy_qL?sUoG~ijdhnpQBU9Fe^JS1J2geA0O3U_6B zS78yhFkcyM-Sb{9CRs~^9B$&*z{@$umnOQ|U#Ib87LIpOG(3xbdCC+wq;mAvRpe8# zF3?o1sNEO;MEpZ9t!xPvVPq>~{bFf3(W;QAhnp5GI^13bA004UMHg!bA#0`QXnW0apgJ?eIt; z7qtT(IXWEw5rbj!Ohb|n!zg94T@9)|m~HK2(co>miGFcp%!Qs3+5hKZXbf}S%8c2I zX@lkwnM2li75~Rj!F?4>6wOqSb$UQ@z31?ya6|gYDe=Z zx;QON#tk7x_MjX(2@Ws`_G`?zqro-gsiz6Zg|LZa0O2H%5KGQ3=Z5Q9!_03S)92s| z!mq6=$t$ElZ^1!Y)dr`ei=!-rxDaguk17qo{ni^#H-IZs;6r;oB>N)?chce;jj`}! zPZl))T9|w`4?6+^NogM6{$1J_koVbA$wy?4{b>x zL78U8dkTpPVj2Y{I!OhOD{ax^Z!pW!N@z*b=EYTBjKiNS^cm#TH9Gp1lM%H7@m$Rc zdNjYh-(*9%YH|Dh@ruq7)<f`sxo+LVfN_j+WH#-Y)KWI=o6fA@AB~dA*dBPB$H<9ik z_Q$>QB`6&+W+IQ)&n!0g73!?Tzs`eIbsx}sn`lQnfd zlmszYxgOCjQsa{iDD+M9qer>oe$V{2NW4felL;yiyCfS|4r45$meUI#HUSq0BK5ld z^t?XOG5Y9!y%H+n@+7EYG_vDhc3jzXBX~qOeTL}6$E}XSaAA>$Fz-@Qp}?^rY44E- zEVl}rW-L;9stu(D)5I-FfLk{56=M2r{@Pdes}jXjDy!uKr=G+EGa27Tp`GO|c`(+? zqZ&B_R$dEjtP8bB7%K*^ps%+AHGiOq5l%V)zSZUdw8iClir=CP(PCiiwmW&h@0!P*P0cKmr;P5W{Eb7#&V|tid}?5i6e<) zx?|sIM41ClxTd7Uen7Zn!^K3w`RzP?xAJZ`shG+wXd7%rl8p``aJ7eKSUtAv_bV2s zvW5P$9~I`Zw^5*<8@7ztiZ+jnkAB!|nx~9dGl*^uc12^W*Tf#qg-;qGcCcqnZ;`B) z0K?B0TY9g`EUpA|rK6?_r1mt`qjw8xa>eZpVOOPX(YLD=V>%<>JA~(zcF!~5TAn0C zO`eT-mgtbqRQKsh_i3O?-y$qR%P2kD0O1ozmZYf_!g4Wq9>uB2-7V&S>tIiCvFRm{ zl?H#JQFhukQ^?z5|3hk~{X1^7v?IQ3(c)VN7c%@P;YAqthaG0FZnZtl|8H3Tq zu$|fMI`bYuWpdfF3lBx$opy*T3p|w%x}R(8{kK*Sd;>a6?T#*e8EgZK<9QfqbC6_} zsyu#Q^2FMaPwEmyj&8;N*r)7w9oR-C1g+w~3X24NPz{x-08Zw?qh#Y?NyK66WVwY()q+lthM@ufR-it&(40x z8f9yZwHeB|IyGPC+~ORC`KCBG9OgIEmNi;eegdi7u-?H5pw23)lX#sqF`HeCfUYW= zI2&u(G7Z^KHl0$ZXtZ08H#_GX1Kmj4qmS+gX0?x7EggG526XaV>yT__G)Ipn61sTk zJk8lJM5tu39{>W+G>q1T2ZyR{y3*-^*6RH* zlWes9wz?!4D)m~yGH!L;C{gGQ@l^16<6_xZ+GQX3*@0CF9}|AP(XB6bk()v-tpL=; zY2iLAO}<4?ln+PLtx`{gi=;|I&WJQ;WOfJ9>W2tYC*};6bO;U~M4w@VHSM`f5Zf21 zVfxqVmgnFk))KpumR~65_RgSuS2arLmn8b(?C}^1a+25!cu*#0hDc2EKFS{ zIX-Aq&P*yz{X3zidM)|n2B{-e&2ibuUq$2jU zJU#+C<&ch|o>=_JY@6(*=?Lv4+qM@%I@@L3OjsS+)d%>fL>6-xrNG}iCU~_M zqk?UPCgq9QqY~$`GUbe@ZFmaoM`lZviGH)YDx+{>nxmal%mhZNX3m(f5Fymbf)2|H z&y&ey&*%kQ9#SlLM|bb+iUm}KWH6w}(FsDx{zDzV@N~biey)4yLM|+HTuk3J&9bk5 zMA*&XU<8~^__~Vz;H^XuIdB}+43=Dlq~-2s^Vck$@0e4QZ)>0P4YN5|d7K_o6dD6w zWJ-(79Yx1ykCG$v$@>Cf*kO_(1pVN&r>(m+j_$yQ&MACD+|uZ4@ziOA1D<0CP@6L( z`qTU$g``B}K}uh|OiV|Cq>8mM;vS5`LfVPTg=DoD!U;KC9TtZWNdHq8Tv3aT$egSr znZ+qMb|r%TMv3-UkQLcxbv|1de~ikO&f9#*v*&rg<@s6_&6yq!0+fSwaH*yw20=j@ z%SS$HxL7=Uel?*JCBLcGsbMyANb0S$ z`eEq>Q;G6q{c5ocf?}EQ!?K74zyX$qNiMlD23!|?F+#5LO4T{I zEO*kXJiuZV4qixa%4Hlp;Xs}!t14ceBl#PP>WPu4TxN~&kzEr z$R#B_oMJFIQ_?-m)KEUNSVt<>E|bbhG1ttm-d9%^B(8{d|63LSv4U2?x~vaRpv8w< zfbN^tCFBm}n?gQEpn@C}^{rioZGkM1s+pDCnQm^wd(@X`7zKKpd~Z@^?AwUw^{uIK zXHw2#@WlWP33}+ow(AekSK#lVk4Xq-@OZ4w!}C6 zTEJrw>;x~uQtiPLlRE58&iDPb;?3l^n3x_cexJFX>MizJV=&EqWVpIR%0Y(+b0E8S zwkfwF)JD{)I+e~`mMA7E&88T2fZ7i^STi#bXzQ?g8SQfW**v$(2TXZu#v6?oP-@+s zNWsY-3tk`ET&8UQH9K68edo(&pAb)b7LEvK&b0R&t(e)GL z!9*4Q0#g2&-2bDh0Iy@FD@o#%e`R=O&`*NLm3XSded8q3pTe8rKj)qGhY<4EHpWLT zsO7wXMV1)+6L8RWKgHsHmyNLTnEUbsEPhEK9!Thyjz^Kl!^7}xt}(O$z9=I5szRqt zwpbl-v@3(pN+9VDOC#(09A^g(3H<%oT%6tPTL1Vv6pG@wKixF(O0uaqSXtR3y8iKa z`8Zg2(fO2riL&j~^KyK!lDi#{{$r;S$mf0ffdVpGef?ON*4w5WVUKD1yxar;dp>PH zQ|yHG16d=3(Ba}-d61dpPdH&;`!pfir696oOk$HE(RVVqxo&)Roj4ZmKmU&Shy>E* zc{Jwwx{t~|F66^fieU57#YhPLz5E7uhSi_O+a)S&T7&C`&aP@X9eZOtF_ZH2&1r=8 zPs5*0I>)=Y_uErTX5$}H)m~J>z}c$HuNhhC?{fQW$EA{KcJ|}Lk6feT5APRg7|Fgf z$HuIx%Rqw7-@*<2=S`)09UWEo4TfEtJZ_#xdfeztj>|yL&Iusz#vvUfU<}y)?|%Kh zD&};<+~2q4RzKiAQBByXY5LI-I?DItLtstLtnGBgvg-A6S9ZbHP@rcC=+*5-`et7F z$ZoJ9N1?FRVr04PyD$_e`*P}O#{PbTC0Pr5%seG(~pRO{c1NELrNB=s#GFNr@aav@VHGgn|1J^s*LMw)Epf*XOy^I7V3 zSc}4$!PykzImG?Yk_0LWD28-*ps8_@9TKpqJaYWJUh@{fMXmHRR3GlNaeRTa)^v}9 z&-?!Iy(f?h@)g4Jcttdr#r?PQQ?am^#i7RWa9rp$%?~As*_F(kdokZAAoLKQeP9>NK@NmHTKZ~6>-Er|zI3`80qzlmbHZufMHM!n;IAf%e)H{4w8aC7{KF?Wf4S4{##Ut zxn+^}zcBmVUZ^C9x7wX1h!P=VF?E@VgcjG@gWka+R@G=pWk?LmMcJ};?wX+T1aM3i z8_7dfB$Wu6iPRr@37WkRDYb{-rawER=z{6qaWznfD8olHXg3K+_fYrCBMy9Oiho~= zxRqVwmSw@+j(^pnUrL~=4lvhiYxVWTQ8$;P!uGV5=d{lcgd!A3_M)hp|8TVZbk)7l z9e5Zy!E6q^1_oZEN;Zfh3;C71oyQD_w#S_Bj_4$*xytH(J}8C^UpE^4tAD@Syy(8n zb|U=qPu_pzTx(S$Z6%a+p|9WTrlmG9| z)0ei{@oj5YYRt_NB{5+0^I-j>$%!w&yZ!kckc)HmJBH^opYVyX&H=YVKRZ@&pHPF- z?EOPu!M(cfSYn!g%n`oub0%)fP1wC)LUJu+&PUfkVW*PkyYYA=(PjFlcWYji0^(|q z*Z%BQYH9sVohh-0AyDjdZ0a5OXQSuYc{mO4j?gn2mpWX?vM#^^RMH?XLQ0n^Z1|_H zUcOj$Zk!2gB50f`ZJf!(j8>$}|F1@JM6=0N$KJL-;yix*iowWo_FUzX-4yX#5E z-mY=JuOPqxH=e#}@u#e-7XU9`^INw4-)Aud{_gl5FZ-Vz<2fhWHlDorlq3dirHUuu zFd!}50ZTkZe<>U`u-i94(`t>A)a*GZ{?lwiz-P{<=nBF+Na5=bT9ohlT&W+oT4J(J zHIH|9woIIKXJ%xwZans-%Jk9Zq0=%xt8=9yp4>0TsIl+t{L)0PUwN zZWx?IKO4|KES%)%9RvzWI`76Y2D=cmdUe7*$U$J#;roeem8~sw2GJ$qUDWB3jZY$E zpay~Yw9j`fCqv@P@jGtua2tz_DPjs6ZoP%<(+H{xb@Y;MPH9O!6YF2Zj^5~Y(E5IR{ftJ3bKg5-%ME(rn>M&r7)Y%RKFPgC5;UR#bm zx1~?7HF1fzWSD(_ya}E?p_KV9%$xi?dpNXmyGt1Mbe#(Wb~#Op&6aIFU&bp|pRTDs zfj)%jC6ZS8+rahD6UWza&}&Pz@ZbH&%WcE!&VMgk@6UXn{wAMKcCY#RUwDh@Dlu`Q z)biNsNN+wk`(_~%f3ew<*0igOlQgCl0L^%iI6qFoCz}8(S3VzcI70qXhv>D`bRaQN zA?BeFVAs%Xuq~j$ueP%BxZdWhu{2X;ysZAN@T0(|2WV4m9Vo_ua++@A7Bm?>&OcQI z=B%*Wxq?ZLW0D*b)Ww25+2vg9idHdfnMR?^3z0@qJI#?lhZY3ED*w>Az(g-?oJ$(fjNG7#Sz9=wE+Be?(nZCtIBljZymLiHa$RlaOM&C)tiBXkE1RFyn9-xNw{ z5)R>)Mkc}hLLEx?i`8)zGs@OqdWU?Ek_&qQ&PMA0adVi+IkSWWmy)kWLjl96QF zU`rw#YtkZO%X$M}%c>)YsSmvt{vN-!_pyyNxv5aEYQjIV+~3B0MX8KeA2VM6wEmiN z4KF60$wKfTVtzw9U2 zNFmj|X84X10WY3_T0k2kyd`)i8T1S?>{Hr&0KXjgjltMjR4O_O}ihc7uX zw+QzvA(_ztxBn`_G)~B@>nB-S6sVC`uourmhKh+9;fVr;`=0fKizs$nXA4SrNVIch z2EV}XI-Bl1-FQe}$mlVR{}+}08*Y`c`;ak**i7I_j)cHy-Hy)DOtg?M%)c-CdcTuE zLj6V7=t|j`!&Mk}jCK8%eUo|yDj{HS}H(#%s6lhJ&UZ!)OMwqX@ zDrjs7xb-fa&``0)C{=5Yr_Pk%L#3-6rD$%L)Pl|;bRr8H?>t%$wxhrI=vueM;G zcsO$6F5I%*cHeaA#uS!GKfWwgiu%V}#R==Ow5Rc4}+=H8P;okDhM=9-_Hm_LS% zi&k}BKmEB_K72L2#!(&9-Z(mn`XR8n?l1I~6zhEJA7J-f_lW}P6$D^5$mkbCKtS7%xk@70;i*_01sYyGOam{yjCc)tF-`#{taZd4)d%F5GsmJ``Nf z!@?(VH`lJ>%=9wIv8^6j8-SlL&F~KL^fG1{>_5Dopygi!KmRQl;8DfWjbo;#TPowF z5nf)X(-DJ{s{DXU<)#!5kxefn7=$&JO(sK>qc#QZ@K&omwi?6Am(vJ{_=e0oI-dx{ zVIyeUT0!bVri%T%X|rl=AR}-_=w}_(1DpT$@P~CgKMp=fg%hF*C%CZ!&88vN-NL1h zEt#9z0hIK{N~bS{Pej8ev=eJq0l=V!Rew<-1P|V8+WCfbq-?>glUE*N$tM~Uj2B=~ zAma!0fZ7{rfYTGvj&&1uq_ele36YBXthnc%|Fz!J=0VJp&sCLog}u`-UThmMl)Acf zg@T9$rKTZ?1e$McjP<-0g7@o6*&>MYl=||;7Q?lM8w;|qzBCa5(d{N_zFvJLMUTz;5d>3DZt5MmgIK0|DcN>NdP8apJt zl^FFLGM#;KiG5)3KBW0H2#0M|Jn&7sFc9bWjv(VJ?qxaiTJb->tUg=xK<%)DkwF1q zY2vw@lJbLlkwPy>|J(ej-6>*Y1rbY?(CCq-$8B4E_Wgo;@*nrTem1JPEtC(4DmGP| z>S%N~+5*%5W$Kjg-&%Z=>}EX7hw~ceKI@S}Y9ggO>d%~hvn@Ng;c30gU zHt{}DK;a3NtRAKijy>f02ShKGAZ%KnxN<%8!`;5))o%kvY_FoV~VcBk-r5u{j1Gm(~tD!i{*Cn!FxT-b)&T(*M zf5|t(4mPecoX6xe!I$ogbIhh^fF!SkZlBJknQldLr6ErGpVMwcR(7lXwy)o1kVahueI+lhuyGr39T&Z{6RZ>43ulF(X4C|GAUtfzpu6BQfJAzyd+pC z_jsrx@x2Hv8Y^ma$fNf=dI!K@H+D3XmWPRcF*hLRyPN{Qld z5P^qaDZMk(gRTR+(xU~d+ zztP0?q!AmwRZ8!RHUuv8yW2^8r(P&|(g-m1a@j^mW*=9?<1DgH7V_L0MS#@T!~%dslqzZ=L}?sM(dOT%EJ-{7#F zeIicdvbI>$?02dPhILfU1GP*~ygqt!r|;KjHjHeheD;9c)K&rVcCWs#fY46!$WC+c zFN63p$S;HXGU%30bC}v@_!-aTF;zG)FgP-hCjmeSpu0EXw%e8rnjir1kg-(pf@52- zGbb;MwL5U%ul<%?Zf2RPv^A3l)6y`=z%~R?5(2c~qc+G%jyKVc0qLM{LI4>MwAujS zy7%yXBr68QTCmNU7~KWLL-Cq1gGn9nuYa)cKY+}?FxDmqDrHi@oIXi1&=NeJ1oGWc z7%HxpoP+8J0yxgC744Qwe4<8!_vwLn(t(36u(h3Xj`2S0AUs6@mOoek60YsaaEV8- zT&s!oMe(WCNcW`4nd*rOt_dLFV(_d`@QJ`_)ABjn{o#6~?GtS!6tWrbjP&V+1*#21$iyUDdg*Udi?E;5sW41C2{!rOR>q`=@yZ z9ET=w@D>=&$&HUlGK5u=Ah%{!u*3%60(mzge8slfBwLmoH51BRp< zfh)*<&e=xG)aQa+hz||>uSgtILwtHo`Su7@-H{3}E6p}D4fEX%Yme=M-Kc#vIo7`}r?%Rcgc5gODEAWq!Y23K8{ZS^wE!PD8HrF~tOf>d;|Gm% z$prY7c1iwf`OX%AQaKv5k18Wv)3;4$JfUNlM;Q8GB^1{`_`&v29^h5Yc*#BRu5f)Ad3P*_+ zhjYGe?xM$`V(}-1E~|ienGAvZ21=&k<1WSb3RrFiXW?bv4YXds zZB40W^hOQ8W zE&lOyjzD!!on{m2R3Shrr!RU~fPM4du}WS3Yio zanadSL=Z<*vXEABP~v2dLmxHng(Df099%LL)te{|Le$h;};r<{25ClXwZ4OztZ(Wz6_hTkm_C~#y0ZxZ#4`TExz!K&2au{qccMi;w6wR zORZnIiu0!5YfyI{R=5o!xPM<4pt|>{7`o2N1V|PC1+OGL?t#Wj`P5gQ;V2;;c8;1P z4o7?GLRnFEM6GDUl=D9t0)5i!+}Ehq?>}hT-AVeA z5h1+mzNJTAtJXw#9O^7ET?{XlRJF(K5x;6Bplumk=80bQEht-=;xYR31~3PSYV-p?DBc3^ zJa|s|*-P__Jn|9k64mrWcy#q(Q3_vw%zN^^wg|gioPsK_{Y6R(azjdMM+Y<$`@e*g z?1q=hO*~Ug=FP;9h&Zvr^>{l$iKz0m3>N9TFelhVXjMsc*NHF zdXt>EZ0tVVD3YgxCk4bcL92RT$FpW`LrBL#9+V;-iX^hh4G=ePoa;XLHqX1rCyt2Bv z=^_h+vp5Jt;S+Mb38`WrvnNz&=y*46-e3~`rQ4L>*xdh1C%^y$`}~9iYrz%=+(P`1 z+cY3FDZqDdX^@E&fSKUGvH=7b*bM?07&_Shd@ewhQUEG~|E$Y;zXHy_0?_`aA8ZqJ zE(H*Rm^4q>GRFmpO9SY^Ye0_D05Nb@P~CqTc+kUt8X$;U1|SA$NC5?Mp@6~$Ey(~- zL4`5^eDD`g*Ov$UK3(?fJq!|;1<(@w|8)8P?#~(&AqxguhU-kRB(?w#)6%zmVQxlI4kfC5C!qsfaz)`WsOylTP&4lt7^%JdSfi8^l5!!!;U zH()uF1}F7X4b$)$x04ClBY#YqaHhO+HNxn%ET`0Q6N3D?n>6EpYu!zClOsT>(~Kyo zQ(yabnz|KWI~Vfk^g#;wf^=Iq`Sq$zvu~j-6?0^jDT|?txQs&9{oW>lPN18e+m@b{ zzr~_vYOrWeI1rKS}G0 zzwUlcQUM`P{t`MQJC&KSVwfjM7S=44D}mUmzkWAxdq&>>gIL$F&wT-DlI;s2kd88T zk;dH{zt^dGd9-dAgPZ6#q2i56O`#COk4tV@b`IY=yV~r->vj5apFkz?lX1eKvkE7M zS;T6sEn5{WKGxMg+BxC7umsn#rzQh-tm_GB_%P^>S6*0+!Sas2(@Lqfu((lud&|Ew zbFyPUPWP)7i*oHMYcR@qQv`0(i<)oAkm2a10={WZMgxjmDLRK6`MUXeWhzM`%~<1wky6w>ds~jtXqHU-kp?V#Z1|u$RogG6Z2r?_FtSX7Zjv~>_inKs1Q`qczGHH zs7Ok23q~lCo*4{-22pM#mGv(TVC+2hc?8gy`;xBWuLmB0pg#?wq2WnI2=V)ArsTnR zwqH}IT_ppRCJZrl8u1!glmMyl6CPhP;cwvdw)s{Z4U_p;K+{K=wF5hsaw6i#M-M&9 zF;h&GW6mgZ(ELnKs*Yc@Gy`AV9ga8DXPuk`HJuD>?c=^-;k!~UFeNo6{FsuS7bbU; zdNcVgqPkv}`#DpeO++ti<`>rnq{6%(B z63xC_+?0tU2UQ7d8CoONXci0|P`0InL66cuQ=OOumtfa;QajZUlz02JHIh+cbfj2xlnCE zy;Gh%byufmeJ+wVRYcR6^mz0YOso{AoP@02^kJ6FXS6H*%kJB!_qM-2&c}(lDHHr` z(9@SG@BE~oWhL_f0jm^qaGiuyDh-qvauFrCCE6~>A%`#9cy#TtvT6D<&6%ihC$km^3wyKkc`b;(ws?wLV!1iWsPU5p8p~>j%DT0EzT8ZHoydYc)j>Ed zdiNtpkz6uzyA}G-#j2$ZN@N`<-;UVn25|`Wdf2U|BLvSnl$vI~Q# zYhHG5WBD$q%EK_QSMVgrm=pvjCJblBLVx_8WH7qi0&%EbORk~ye!O38dUai`h&YOP zzbqX*Q*y~b%PK0A9_4D+dG-cYE~ek_F{jO>A9BexZ-)g#`3~JU? zu3vr8gr?a|jN1U%a%bsHYl*NrEaltG`d*$|c5MoZoG;aKdUKusj1Ozce#i%Xf!rF+ zc=}BAi{0jLz4~0f9R0j^U>6oz@UH9i8LQ0a$v*aNgQnz^m|^`GKWegRIREa*uKjws zE4Q%G=^fYw@rQ^$k9*!(b++b4fPOgjP4zyQD!eD(FKC%@yx%F_X2#u&?S8ZM?hP(Z zig6sa-C;G2OW-A1=0t_8bWMYH5U&e`zQC6VP$dZ!ecfEpEx0edoi)?Mm#=CZ^`R%S zLi3to&H>fj4v1a??T@36Yj zrG}m+hP=>GbV-lkj5aa9kJS;e)@@c!?C7uXo&}Mt2siq@xWw7rswpq(S)ux*wcprq zok|u4f0L^mOh9|*aIPj2%LL#DR+1H-W@j?(v-=p1XKHC#p5n95*C-ipG&R{vmeLv* z!WHM2iXu5lK-ObQ&2&MXx^^pY?VbI8RILGU00NsOtM8bnSUH8ZD)LGF@+v&-OGZ>w z7{`k2S`Niy_8cQrG8-}$@URqe(Im(@3CDRfLAzMj%eWIgfxXCAdG8m-%@eNjDV3M^ z#i&OI(#1;f@=C;92D3Ri%JXTZ_Y_@6vUs7ayF~G^0(iToipij_q(WlY$C+}eSh}~B zuaXKP*~@OynCo@LaYZe~7u|}aV#!#nsisz$T;IY^3@xBXGy8vO`UqObA8u~U*Y?QD zl0aVKIW;$=zub-7p^8q`GVwuPJJ_4I7L|da1*T2-{R6d>#j0${@)*dJr+1kaVQ$e}8G{DrH9FX9GGkV#Nv<{eN-jSdt)rJ5e{3zPDWxVQZUCHQ{8W>wu1SDW;FDnE4=pqu-i+^{OVP;N58&G%fBW0q!T9r6?YYn9KN{phO(mS(W$w{Kw>Y~+TXobvpH%R`f>zfZM1K9O@{ zPLMh6ZDv+jsND>3=H1*IIO~qyp!<;Wu?^(DOwBiSrXan`}?C7FS1P%v;ho zLtk~#bPhf@Y+J1OB$G1Z<1Yx3d~xMdIJRhK@yAmNDus{e7PN!7YFMSU;`ALdQ5%%dU_s7fDlj=Lk6>g_;5Z43H@cCB7|w zQ9)Buy*QtcW@tt4|onHn|U zgLOmkkT*Ze1N(vbP97JP1;~`9wUiyG!w?Bz^u?lRRFtFq@tN zkRdpDD>wV4%B8K?W%B5mo=%Gq1p8ENbuO;bve)KdN;Q}?ayaFvC71uzU(5B0Q-Il$ zHoLvg+lBi)Wa=O(yy+oX%B;86;-VsYWQ-=Q;)OfS3Bn}{EwxL8LMHswU!%4 z9v?3FmLG=gRK|M)M>X@lH@zs?R6?Y^d~EYYz5QrZ-)6BYFI2`<)3` z5f0Mu$0O3@s+0qd1zRd6q;NR)XsU3sp=s1?MLNfHqG)DVhvAp@WL=xK_W3C^GK!!q zJUzk(_3`KMvQlxlS}ppCu%TpG;FQFVbi7UlY~}%CELkPfh0T96F8P2k`0b|M0*zaR zJ{Hc+WTG-QRBFqu0gj?VAQnbJvq*=2;@xyZMeG%KWkTU8HeQFLoTPXsLpXT@6Cb?A zI@2A6$qNpa>dCg6rh2_v4^(tm`UW~)(&|}K(t|dzZO+dRu5oLU(|{=#6Z9C8rqM76 z_ZXJKM?2s%P9XkH^5c5OHr-lMqP%PZLLx&sB`8g8|4aSlJ#?=)Nb{TIE~6yIS16N) z_m%Idr+IuW`uK0pp2hFx0mWPG8W*i?$#$adsaFZCbE4r7oj#4$8j3!xVMaZE3g(nixJOnswZ~T{Q z&&R(mT3(8Gt(MB!g`1V|Biif@Z_8^}XhC)A`h;vuwR2+Yu)5!wR~_2qplOIbk$&fN zHjE6U!Er|;;4=9>fgP$-(C zhH4^}*Te`1qhpgP9e9G$VOt94tGclDNo{HFbgN8OyBftW8+|3>29vZigNF8sYq6QH z1{66PnE_WgqL+-FJ+P{n;>cy(zoRkoujVsXE=J)Q0=m5{Ia^jy;rkwagdL?Js!v7S zkJ9kOPt*q)h!^Ht>Cg(B+0Lf^ew84VY@MZjDy-(M`+0Cq|MoFZ2c;X7r5a(2$CihAKn=~seu}ZKFPpWAlfs0bI zZa`;(y4Ztv1@-)HG55WmOvQ+f8=bxWsd13}iRR<$FN~9~F_KP_d{E?dC*i}{L zH|lG7!WU8UocQXkXg2)`XHK;6Nvv<#Hc|hIbS?WJpc+ML6oYqAb2Ntna6kXhe7=E2 z01Nym(#Hb>KC)p(apX70thev;Oni?uC&2uqkGjAy)vG|6S7MQa|Am&Jck4HI6 zjI=+#DYPJSm5bC8KLUEpJZRGkw&%6iCF~XSabe(7=~{JEDiT0+Kz^lDmMnN@EwmLN zj2~IBIzLV!$#t^l(W{ebN{zAgv$`0M&wXs4jEKtbUa0roOPTWTl2LqxT4S4=Ey@cs zuZfCQss#+c2r`^E5t`=+?LYp!TU#4hF0I|_V5a(yrVOKvf{dSD&{(|3h87;IvTDN= z(La?f=E1TBHvAgp2 z)Vu2UP>f-VeTS+Z&Q~zEm_Tn*S{7Q(x9?*m1k6(IFTWyG90FiJI)51mj>@={$rI?q ziBJl3`;QTT{s$7^2Vx7m`s+-LW&CP#dyqd~aB}^XLSJFtJN>16E*vq4+V&T_u3+n|<@@fH&1z6=S`=rCzMA|ROR zo**n_U zRYd&fF%9+sad#qTtAM0YJB}~m154$}ZMfnw)x0P5UU{ zo0nD~CGhTgsD{16)5gGWhNB z^K;4M5TJJ?`;TLs7Hm%;!bmQwAkIhr{=rXMcYV2w@jql;aYggK3d>L%C>f}hFuGxu zaAe5~m$y7u(`9BV&aC8Sim~%8Y9x6N^~kfkH8!+)c7h;h1Jx`ubDO)#@+W%+c}G`Q z&Iq-vtjf!GoE?;tLw`1CMeta{^yH#7M`OEcVEK-rzar~}HF=(#E6(_kfrN%bOuumV z8N#?K0b1b|>=iejOs|Y5Q?>K5_ro7>6+cX!v5+9S!K2w8EQA(EMNPxvW0Xc@nVEQ5 zCQ!UL!n4BrlTw*?kYUZF&en$>9z=Cq1q!>GgTDQM=tFv*4EFe(l`Wrx< zgq4iG4U3e{mEFF{8QYHY0*oqQpY}XRQo_@vGeG zEmY$#gW}Zw)WA6UDAQzdbH&sv6m*xU8x4uu?iICVuL8bBFJz7BFz>^ymdUP^cr{&+ zAEdkS?P0T--$r9;-o#}-^og0o|Bv{6cC+y5bl>GxK%3k91RB_A?C;ips58bgl*s>a zeyf%R6?n>A7fE6zr8G`u^S;1?K+w0~b2vFO>DBb+>DcSye9Ut5rQYbY`_16EZKX-C zq{9vp`1CKX7bdqmd)^+-bF)`c@H$GFKh=6XcoM9cUp=ZvZ*$1-I0r{pn#pVC2h%0(IJ>&M24 z(31qPQ$LjnKev48Cv0!b9c-EZ>YU?CV&wVS#Bk8N9}nu~S08#L5{4tyV-VGS{>H|~ zXwSPJnw5Sg*{lgT%0%tN40m1I(}uqb7B*S@W&h_FhAs_yoZ1VuM&ybMwaN=j?g;2b zJ-n)m`RG+DOTm?XsXMANzLMnB&J>J1J(^<2#1_4LA@3LIL2q3%OWR(7em(2WbSFkd&LaAOyE|{&kwh$^7qAZ237bywBk{t=cc;M56$d z`;t`;ZBhZ&_fqV%%Ve3cKD%q86urIVP&;yiKJ4O zDq{F^J?pmC7LU_VSjHE?F-GGN2B-x4e$-o}%~l!wq8%qX-I*fIJT?5L|I2#zL7x4t z!C9@Yf6?qvUNB=+oyKs@+ebm<$MzS{X)?em%*1)4R};(JtJBm|vE`?ma)ur;V7eUQ zc9$B}0@v=6)_X2K#nsh%6%E{^?S z$=S4l-Q6#rMwNX_{5^xkII&*KP0aIm;TcaK_^I4%ve?Ra!Hd-l@ z2KEOhN<-qwu&*TP*L`B2sNU2T6?4ZHmE3G6qO0yrpMB-rCnG|#eF@r-jvMZ)OZWo! z)p6UWi$I$?{(!H#!!0|KZ-aKj@}o6N7x!tJjhEXBe?M+{DHUU9g!}$2uXCF-X)I4p z2B7OvG=aXJ-lwDUuBYwww_~KYHly{AgWvzY1Q%Q=eiR+HkRCf5g}Pp~h=Z}KcRgLg zIuDFY!6ofq;;3}Bf<-C!Q3a{=4myF1MI@8X+6D?r%{BBIql;}k=e4g#mA^AP9hdBm z2Q@WCQbKgqA2{ejj^06K9Yrq)bAly$Wzzt58hQw43UohP_?@A8g?^YEGxX!24(rok z+JsaELAGXs=pnpDLO=h4zqAY#;xOafol;i?QLtPB6#2K$?5!)J!bNBT(0FiK%Fd5* z>v*$PR)l)sd0d2DeQ@%4$Ef;Vq*=q;pGZ8#mMiw)0fWGY?<}AsdU7MkqfgB{#s;73 za{+69FX(znIARJ{dlVw=#R9?VyFrJv9azHHHJC5#uMygO2xNs>rBOiX0&{D zF}kFURiCHO3haAx9CvDjm-Z{v~V_v5jHVLBjm)Zd{4C6wH8VEW{)#aue@w zQTIvpu+GF243W?L-qhDEe%6dee)B#d;h*nSc_RnoHs7`(eI5c|DXzZ%eKyNdm1rhW zSMJzP+yuRxvE(uof7?ZogXS0}|8jU|EJIfyoZB9^bgf?7@1oozn=OG7JKCSADELDn zV2>@lAuaJ?H)~z$wyOqsbxs;=H?QP$vv*GpfaOSwJ z)8yg+LfAJRt@>4NRTpfO#^vN1pZb}r84_9#V58s^3EGY=$wJrF(9~qs6 zr#w+PrC_3g#GA3a6>xXB6`$R;-LvlV)HUN&Z-o*0o_KW?`1Fk$yOAy6Sm}5l&kM3W zaR4%X`kOzhyL5p|q4NWo9z5EO$wWI$&0asIhk#FVU!q`P=yuu9mF6RqQ%_v>$=o$H zbSy}X!iAlJIHwN(6D#I!?g$27QW4aS$c~_gh z7LfNRcI>|^ZJ@JmudZ!4&ny3wpxb|&l#jY~23P*?HtfbBx4`Ybg_nce6Y#i7W)^iQ zqlk3*TL;%{Zhgy42fC$W$L?8a3s1Ah)qGRdtZ959a&KGE@BCb`i9IqIG+e6;3DbR zTEXZ;r-~O|cbGk=kTEzTwMwY4!jx#^KTBxver|!2UV>`Q`7~bzSF$8HpZ2r%_Ffv@{DZ;9O zuBeH_Me1C)KUSg0v84rM2bTfWk@$M>g0RLf{ivQ~%6|9BuNQ7bpz=xwHhEFjr}Zh{ z_h59{px2J#BYmwa$^?#D$x+))qG*rJX&WCK6>N~UZV8xgC9?f_5mr8t)%4? zoZQG}2C;N#l`O2xeLm3;F#Z;hG+lhQ=VrlkTz*Q~aXK7sCSTMA*@VtzSHr7|#&n}C zFdbZ?PEkhc^Zjl&YhgY@+`@+37kGyX4Cvz2dXLu}>9h$P(KM3VFV8*qsZMJ{n2K#V z4Z_knu;sm7$Z%{sKO8E{QsKxb(}a2SD)@1lu3f7c=z$ZZnl@MTdM(&z@ZHNoteVxI z*S~V{&&nqQoX4#_U(mr{G^i9YeQekx6B?-$hzUKYuN=;mf>tiA<@aKn&E@~)!z(rB zI4VqNBYa1H{ya6#vaP>yOy^*Ir$4j@b_?L~hM5qTUbMsX8THOW@6g8Ugt5IH#X|ztC5baLJVz)S7~AGfo0v@MmI;po z23NMc-X{Gl)}*r!K2TMYF5#umYyIG(zO>=0x8NL6B2AV~pt`ES$mwmcfc$LpML zlKpD4WhV-yRW9A;^8{IA^#%#w44p}596>52hs%K?Ri$+`Os+gfs2mJm0Co`8bk-B% zE{b9cD6MtWmXLo3{pDe6u14)I+ngKlqD-opSc3A8kX3P57S_gBK{^np_P_%iZa&=3 z6BL6YoFOg>Ma5@yuQdn0)Ba{#-laMnrQe^H33Xt$V>_TFUueTboZMFB z^_ygVy^_acmi#WMjJoL;|AmgHJ$x2qLDcpz#XjC%z@)bmZg^S98_28*lFf@vNDoYS zTui$d3>1tvUP1sFge`)OhXrY5Gvt+Ap54v$i&my+*-y_ikliP~G}Q8qJ*s++cQmix zseA2Bc@}LnQej+lC5o2AKS<#hkVDIrbij_7FW4NVK@j%a;V)NH*j^)z4__ib(bgWt zEG>7|ftHv2lcf7R`#r!4UYEey)9=Hyv+kgSaxRCEr9Be^C0cfeg{t5;CPs%c91A_9 zz81KtOeI~zE&f@^%Knzl%>1^Xf3_3qhaVqLctAsQUHu~nDs;p=a>N|)PoVz^%s+ws zC!g9z%;6eZ5jW)o7iAEjpq5C%L4-ghVAkHK+ir&%c!?0m3*AryMk4|e1Bk)QL_lrC z=yh_El}(IeU@JJ02uKEMTWx}N-McR~oBlb8{|kaYHoVmr7uj{p1~XwMtozC?d>gFn z$;$X$qHggGSm7tKo5a4e&tb_@72_Fapl=wWccAOYc5^wF4j$PJF!f=&S?>%JKGtL=3Hf#w{(OG2IyIx=C?XF4IjkD%Ng71 z%ZCxAr!PU)*=;~=0h_OFwF)|mFyp@$sR6-$6Akq1of9%}20gWfL`14+$SXEII@$5@ za5&jK_0>KLUoSiyl^l;Bi4{#2YQnV|#^(n`f2+yd|DI*V^}55c?+ttZFeDKP<~FEO z8Yg`lzaN9J)iNzWi1V&}1Om~$qUKAai8#N%<_ zW)34|Kt)i}2Ez4JvKn2)#P_Om zDB3-GdDU~-*&FBD(owpt%n}H!aFz%=I#HrsWu;n0Ee;i+F4*)U)3J)o)V?!$=qw?61xsL_(|gCoT*t zXxztmQPg~-MIu_{Cw3FWYiR-MCg%SXq;0^MnNAawtcA(GF(5*a>sLMZCUd*?z9TP! zKO<3gqf#ZvSIaLHc=&vGBluu2#;C!wZG|cF>A5%RS|4;RffN6Ps+<&64KHIlBF?Gc zkCH|-ZEVDlU;Gz=_UUE{v9lP-mPa;Er?~S|9mQwnQ3|%LW9SnQ89@(V@k{pt97cEw zOM)}-iHOuC>XA>hS^5%pcmuBjjx3cvLfT0-nq>|if$uv}iwA81Wl?8%GS;7FVtJ{& z-7;P;XGajRmG^MucXHyh1=e(eHoc17`$S*nkQhnTtf=T;KW*Ac2_9@H=_H|JXvwbm z2|k4kp9B`E*#0>{9}rLqdgY{69IbF{G**g}_Ghdd`eleYB!Fd@W@aSbB8tJ3nfOgZ zU}JQa*%^86xhvE1Po@%5J$`bbfwY@EepL&c;qxg-OMzh5sZg}wx_vn~)jMFJz%yllmN%#_%FsJ=$8vBoK+hUli$K(j?i z8h8B=Ua1`B7dG{*heI;PNv^@vLd}|_=ThPwlDZMe^Og4EiM_2hgv8r}gvI{7wXQWA z&{I8a*}gyoMz0uzNl&}<(Tcm9_Uyo~lvf8q5(*qL1G{Ve1innU@i?utox@*Ti4%%}Mp&Z_3FRiJG&>h$a8d%% zpba?&Y99J{SS@$~|8!Ljz`v*6>1H0RFNz11XwK)P#V$90MSCJK34E-c3iQ|lef4f` z9qRm4Tc>@o zVzw{cDe$21yeh@WZDdrazi3(J?@NS?YV%xH)+K$_CQ`vH&2dGU!sW00aSRWc`s($W z!&84n5GN^5dwk{i?P)Ud?(UIbx6ihzK+%LOOGbWB%k6rO8q%A@eNCg0WRUTqR?xDCLsoK)*Y(&fGCglv{y=JrdG^4uLieZCE1!x2% zDimV7P|&>b1qKEp=y$hK`wgMDG-dnq)7>K1y34Qorii4k&{+B4rZmXoTe+l=upZ(4 zd4~5K@IjU{n~EA7`MOnduo5S=X3Ve`Hjz%BhEyw?8j;meHIE6Z&+&JdqvmFap&EJ$ z(<Ez!B{wPiE6jiG|URUy; z!w1FJLpl7Ac_9F~^E(r;DeY?MB|CSLa|OuWhE#-JqYT6@C>J*tvNXD_;%z>|}nhvTDd3b-{>y}$W!YMH(HC=?ad^AFY3M;Im#fG5zQG}FO zH=)j2xT+umAf((_<#(3SwhU}{VTZR7>zm!TYcwb*sE-s$eGD+K0uZ%LQUbUH{r~%A z223FhR0i;a-K2pmg#SYhprN3yk)WV3|2_A=*EYCE8c0R>Ut!k&&*1Ez0mlEf{<~WM zze@v!0fS&c8K4B96dWW26o;Xyga#{BLgRwhWq|YmC@`EXP#oX^mitd>faCsC*WlTI z3g$Ei4vd})hYO~c`)An=)|3O%68>+t{Qvf52+olE*V`g^MGhze2m|BE0|ilF`G8Pf zPOj!GUKXb6;6gbdA=pnINB}4Rr^^GW{wLPKeeytDzzBHx--(0& Date: Wed, 24 Dec 2025 14:50:42 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tool/BackupUtils.java | 224 +++++++++++----- src/tool/DataUtils.java | 188 ++++++++++++-- src/tool/GTaskStringUtils.java | 162 ++++++------ src/tool/ResourceParser.java | 125 +++++---- src/ui/NotesListItem.java | 115 ++++++--- src/ui/NotesPreferenceActivity.java | 354 +++++++++++++++----------- src/widget/NoteWidgetProvider.java | 128 +++++++--- src/widget/NoteWidgetProvider_2x.java | 54 ++-- src/widget/NoteWidgetProvider_4x.java | 56 ++-- 9 files changed, 932 insertions(+), 474 deletions(-) diff --git a/src/tool/BackupUtils.java b/src/tool/BackupUtils.java index 39f6ec4..3e0222c 100644 --- a/src/tool/BackupUtils.java +++ b/src/tool/BackupUtils.java @@ -35,12 +35,32 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; - +/** + * 备份工具类 + * + * 负责将便签数据导出为可读的文本文件,支持以下功能: + * 1. 导出所有便签数据到SD卡上的文本文件 + * 2. 按文件夹组织导出内容 + * 3. 支持普通便签和通话记录便签的格式转换 + * 4. 提供详细的导出状态反馈 + * + * 设计说明: + * - 使用单例模式确保全局只有一个备份工具实例 + * - 内部类TextExport处理具体的文本导出逻辑 + * - 支持状态码反馈,便于UI层展示导出状态 + */ public class BackupUtils { - private static final String TAG = "BackupUtils"; + private static final String TAG = "BackupUtils"; // 日志标签 // Singleton stuff - private static BackupUtils sInstance; + private static BackupUtils sInstance; // 单例实例 + /** + * 获取BackupUtils单例实例 + * 使用双重检查锁定确保线程安全 + * + * @param context 应用上下文 + * @return BackupUtils单例 + */ public static synchronized BackupUtils getInstance(Context context) { if (sInstance == null) { sInstance = new BackupUtils(context); @@ -49,82 +69,117 @@ public class BackupUtils { } /** - * Following states are signs to represents backup or restore - * status + * 导出和恢复操作的状态码定义 */ - // Currently, the sdcard is not mounted + // 当前SD卡未挂载 public static final int STATE_SD_CARD_UNMOUONTED = 0; - // The backup file not exist + // 备份文件不存在 public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; - // The data is not well formated, may be changed by other programs + // 数据格式被破坏,可能被其他程序修改 public static final int STATE_DATA_DESTROIED = 2; - // Some run-time exception which causes restore or backup fails + // 运行时异常导致备份或恢复失败 public static final int STATE_SYSTEM_ERROR = 3; - // Backup or restore success + // 备份或恢复成功 public static final int STATE_SUCCESS = 4; - private TextExport mTextExport; + private TextExport mTextExport; // 文本导出器实例 + /** + * 私有构造函数 + * + * @param context 应用上下文 + */ private BackupUtils(Context context) { mTextExport = new TextExport(context); } + /** + * 检查外部存储是否可用 + * + * @return true表示SD卡已挂载且可写,false表示不可用 + */ private static boolean externalStorageAvailable() { return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); } + /** + * 导出便签到文本文件 + * + * @return 导出操作的状态码 + */ public int exportToText() { return mTextExport.exportToText(); } + /** + * 获取导出的文本文件名 + * + * @return 导出的文本文件名 + */ public String getExportedTextFileName() { return mTextExport.mFileName; } + /** + * 获取导出的文本文件目录 + * + * @return 导出的文本文件目录 + */ public String getExportedTextFileDir() { return mTextExport.mFileDirectory; } + /** + * 文本导出内部类 + * + * 负责具体的文本导出逻辑,包括: + * 1. 遍历数据库中的便签和文件夹 + * 2. 格式化输出为可读文本 + * 3. 生成输出文件 + */ private static class TextExport { + // 便签表的查询投影列 private static final String[] NOTE_PROJECTION = { - NoteColumns.ID, - NoteColumns.MODIFIED_DATE, - NoteColumns.SNIPPET, - NoteColumns.TYPE + NoteColumns.ID, // 0: 便签ID + NoteColumns.MODIFIED_DATE, // 1: 修改日期 + NoteColumns.SNIPPET, // 2: 便签片段(用于文件夹名) + NoteColumns.TYPE // 3: 便签类型 }; - private static final int NOTE_COLUMN_ID = 0; - - private static final int NOTE_COLUMN_MODIFIED_DATE = 1; - - private static final int NOTE_COLUMN_SNIPPET = 2; + private static final int NOTE_COLUMN_ID = 0; // 便签ID列索引 + private static final int NOTE_COLUMN_MODIFIED_DATE = 1; // 修改日期列索引 + private static final int NOTE_COLUMN_SNIPPET = 2; // 便签片段列索引 + // 数据表的查询投影列 private static final String[] DATA_PROJECTION = { - DataColumns.CONTENT, - DataColumns.MIME_TYPE, - DataColumns.DATA1, - DataColumns.DATA2, - DataColumns.DATA3, - DataColumns.DATA4, + DataColumns.CONTENT, // 0: 数据内容 + DataColumns.MIME_TYPE, // 1: MIME类型 + DataColumns.DATA1, // 2: 数据1(通话记录的通话日期) + DataColumns.DATA2, // 3: 数据2 + DataColumns.DATA3, // 4: 数据3 + DataColumns.DATA4, // 5: 数据4(通话记录的电话号码) }; - private static final int DATA_COLUMN_CONTENT = 0; - - private static final int DATA_COLUMN_MIME_TYPE = 1; - - private static final int DATA_COLUMN_CALL_DATE = 2; - - private static final int DATA_COLUMN_PHONE_NUMBER = 4; + private static final int DATA_COLUMN_CONTENT = 0; // 内容列索引 + private static final int DATA_COLUMN_MIME_TYPE = 1; // MIME类型列索引 + private static final int DATA_COLUMN_CALL_DATE = 2; // 通话日期列索引 + private static final int DATA_COLUMN_PHONE_NUMBER = 4; // 电话号码列索引 + // 文本格式化字符串数组,从资源文件中加载 private final String [] TEXT_FORMAT; - private static final int FORMAT_FOLDER_NAME = 0; - private static final int FORMAT_NOTE_DATE = 1; - private static final int FORMAT_NOTE_CONTENT = 2; + private static final int FORMAT_FOLDER_NAME = 0; // 文件夹名称格式索引 + private static final int FORMAT_NOTE_DATE = 1; // 便签日期格式索引 + private static final int FORMAT_NOTE_CONTENT = 2; // 便签内容格式索引 - private Context mContext; - private String mFileName; - private String mFileDirectory; + private Context mContext; // 应用上下文 + private String mFileName; // 导出的文件名 + private String mFileDirectory; // 导出的文件目录 + /** + * 构造函数 + * + * @param context 应用上下文 + */ public TextExport(Context context) { TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); mContext = context; @@ -132,28 +187,37 @@ public class BackupUtils { mFileDirectory = ""; } + /** + * 获取指定格式的字符串 + * + * @param id 格式ID(FORMAT_FOLDER_NAME, FORMAT_NOTE_DATE, FORMAT_NOTE_CONTENT) + * @return 格式字符串 + */ private String getFormat(int id) { return TEXT_FORMAT[id]; } /** - * Export the folder identified by folder id to text + * 导出指定文件夹及其下的所有便签到文本流 + * + * @param folderId 文件夹ID + * @param ps 输出打印流 */ private void exportFolderToText(String folderId, PrintStream ps) { - // Query notes belong to this folder + // 查询属于此文件夹的所有便签 Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { - folderId + folderId }, null); if (notesCursor != null) { if (notesCursor.moveToFirst()) { do { - // Print note's last modified date + // 打印便签的最后修改日期 ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( mContext.getString(R.string.format_datetime_mdhm), notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); - // Query data belong to this note + // 查询属于此便签的数据 String noteId = notesCursor.getString(NOTE_COLUMN_ID); exportNoteToText(noteId, ps); } while (notesCursor.moveToNext()); @@ -163,12 +227,15 @@ public class BackupUtils { } /** - * Export note identified by id to a print stream + * 导出指定便签到文本流 + * + * @param noteId 便签ID + * @param ps 输出打印流 */ private void exportNoteToText(String noteId, PrintStream ps) { Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { - noteId + noteId }, null); if (dataCursor != null) { @@ -176,25 +243,27 @@ public class BackupUtils { do { String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); if (DataConstants.CALL_NOTE.equals(mimeType)) { - // Print phone number + // 处理通话记录便签 String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER); long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); String location = dataCursor.getString(DATA_COLUMN_CONTENT); + // 打印电话号码(如果存在) if (!TextUtils.isEmpty(phoneNumber)) { ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), phoneNumber)); } - // Print call date + // 打印通话日期 ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat .format(mContext.getString(R.string.format_datetime_mdhm), callDate))); - // Print call attachment location + // 打印通话附件位置(如果存在) if (!TextUtils.isEmpty(location)) { ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), location)); } } else if (DataConstants.NOTE.equals(mimeType)) { + // 处理普通文本便签 String content = dataCursor.getString(DATA_COLUMN_CONTENT); if (!TextUtils.isEmpty(content)) { ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), @@ -205,7 +274,7 @@ public class BackupUtils { } dataCursor.close(); } - // print a line separator between note + // 在便签之间打印一个行分隔符 try { ps.write(new byte[] { Character.LINE_SEPARATOR, Character.LETTER_NUMBER @@ -216,20 +285,26 @@ public class BackupUtils { } /** - * Note will be exported as text which is user readable + * 将便签导出为用户可读的文本文件 + * + * @return 导出操作的状态码 */ public int exportToText() { + // 检查SD卡是否可用 if (!externalStorageAvailable()) { Log.d(TAG, "Media was not mounted"); return STATE_SD_CARD_UNMOUONTED; } + // 获取输出打印流 PrintStream ps = getExportToTextPrintStream(); if (ps == null) { Log.e(TAG, "get print stream error"); return STATE_SYSTEM_ERROR; } - // First export folder and its notes + + // 首先导出文件夹及其下的便签 + // 查询所有文件夹(不包括回收站)和通话记录文件夹 Cursor folderCursor = mContext.getContentResolver().query( Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, @@ -240,7 +315,7 @@ public class BackupUtils { if (folderCursor != null) { if (folderCursor.moveToFirst()) { do { - // Print folder's name + // 打印文件夹名称 String folderName = ""; if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { folderName = mContext.getString(R.string.call_record_folder_name); @@ -257,7 +332,7 @@ public class BackupUtils { folderCursor.close(); } - // Export notes in root's folder + // 导出根文件夹下的便签(不属于任何自定义文件夹的便签) Cursor noteCursor = mContext.getContentResolver().query( Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, @@ -270,30 +345,33 @@ public class BackupUtils { ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( mContext.getString(R.string.format_datetime_mdhm), noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); - // Query data belong to this note + // 查询属于此便签的数据 String noteId = noteCursor.getString(NOTE_COLUMN_ID); exportNoteToText(noteId, ps); } while (noteCursor.moveToNext()); } noteCursor.close(); } - ps.close(); + ps.close(); // 关闭输出流 - return STATE_SUCCESS; + return STATE_SUCCESS; // 导出成功 } /** - * Get a print stream pointed to the file {@generateExportedTextFile} + * 获取指向导出文本文件的打印流 + * + * @return 打印流,失败时返回null */ private PrintStream getExportToTextPrintStream() { + // 生成SD卡上的输出文件 File file = generateFileMountedOnSDcard(mContext, R.string.file_path, R.string.file_name_txt_format); if (file == null) { Log.e(TAG, "create file to exported failed"); return null; } - mFileName = file.getName(); - mFileDirectory = mContext.getString(R.string.file_path); + mFileName = file.getName(); // 保存文件名 + mFileDirectory = mContext.getString(R.string.file_path); // 保存文件目录 PrintStream ps = null; try { FileOutputStream fos = new FileOutputStream(file); @@ -310,23 +388,33 @@ public class BackupUtils { } /** - * Generate the text file to store imported data + * 在SD卡上生成用于存储导出数据的文本文件 + * + * @param context 应用上下文 + * @param filePathResId 文件路径资源ID + * @param fileNameFormatResId 文件名格式资源ID + * @return 生成的File对象,失败时返回null */ private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { StringBuilder sb = new StringBuilder(); - sb.append(Environment.getExternalStorageDirectory()); - sb.append(context.getString(filePathResId)); - File filedir = new File(sb.toString()); + // 构建完整文件路径 + sb.append(Environment.getExternalStorageDirectory()); // SD卡根目录 + sb.append(context.getString(filePathResId)); // 应用特定路径 + File filedir = new File(sb.toString()); // 文件目录对象 + + // 添加文件名(包含日期时间戳) sb.append(context.getString( fileNameFormatResId, DateFormat.format(context.getString(R.string.format_date_ymd), System.currentTimeMillis()))); - File file = new File(sb.toString()); + File file = new File(sb.toString()); // 完整文件对象 try { + // 创建目录(如果不存在) if (!filedir.exists()) { filedir.mkdir(); } + // 创建文件(如果不存在) if (!file.exists()) { file.createNewFile(); } @@ -337,8 +425,6 @@ public class BackupUtils { e.printStackTrace(); } - return null; + return null; // 创建失败 } -} - - +} \ No newline at end of file diff --git a/src/tool/DataUtils.java b/src/tool/DataUtils.java index 2a14982..7483c6e 100644 --- a/src/tool/DataUtils.java +++ b/src/tool/DataUtils.java @@ -34,24 +34,50 @@ import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; import java.util.ArrayList; import java.util.HashSet; - +/** + * 数据操作工具类 + * + * 提供便签数据的批量操作、查询和验证功能,包括: + * 1. 批量删除便签 + * 2. 批量移动便签到指定文件夹 + * 3. 查询文件夹和便签信息 + * 4. 验证数据存在性和唯一性 + * + * 设计说明: + * - 所有方法均为静态方法,无需实例化 + * - 使用批量操作提高数据库操作效率 + * - 提供详细的错误日志输出 + */ public class DataUtils { - public static final String TAG = "DataUtils"; + public static final String TAG = "DataUtils"; // 日志标签 + + /** + * 批量删除便签 + * + * 使用批量操作(applyBatch)高效删除多个便签,支持以下特性: + * 1. 自动跳过系统文件夹(如根文件夹)的保护 + * 2. 支持空集合和空参数的检查 + * 3. 使用事务保证数据一致性 + * + * @param resolver 内容解析器,用于访问ContentProvider + * @param ids 要删除的便签ID集合,为null或空集合时直接返回成功 + * @return true表示删除成功,false表示删除失败 + */ public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { if (ids == null) { Log.d(TAG, "the ids is null"); - return true; + return true; // 空参数视为成功,无需操作 } if (ids.size() == 0) { Log.d(TAG, "no id is in the hashset"); - return true; + return true; // 空集合视为成功,无需操作 } ArrayList operationList = new ArrayList(); for (long id : ids) { if(id == Notes.ID_ROOT_FOLDER) { Log.e(TAG, "Don't delete system folder root"); - continue; + continue; // 跳过系统根文件夹,防止误删系统数据 } ContentProviderOperation.Builder builder = ContentProviderOperation .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); @@ -61,38 +87,61 @@ public class DataUtils { ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); if (results == null || results.length == 0 || results[0] == null) { Log.d(TAG, "delete notes failed, ids:" + ids.toString()); - return false; + return false; // 批量操作返回结果异常 } - return true; + return true; // 删除成功 } catch (RemoteException e) { Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); } catch (OperationApplicationException e) { Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); } - return false; + return false; // 异常情况 } + /** + * 移动单个便签到指定文件夹 + * + * 更新便签的父文件夹ID,并记录原始父文件夹ID以便撤销操作 + * + * @param resolver 内容解析器 + * @param id 要移动的便签ID + * @param srcFolderId 原始文件夹ID + * @param desFolderId 目标文件夹ID + */ public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { ContentValues values = new ContentValues(); - values.put(NoteColumns.PARENT_ID, desFolderId); - values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); - values.put(NoteColumns.LOCAL_MODIFIED, 1); + values.put(NoteColumns.PARENT_ID, desFolderId); // 设置新父文件夹 + values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); // 记录原始父文件夹,用于撤销 + values.put(NoteColumns.LOCAL_MODIFIED, 1); // 标记为本地已修改,需要同步 resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); } + /** + * 批量移动便签到指定文件夹 + * + * 使用批量操作高效移动多个便签,支持以下特性: + * 1. 支持空集合的检查 + * 2. 使用事务保证数据一致性 + * 3. 自动标记为本地修改,触发同步 + * + * @param resolver 内容解析器 + * @param ids 要移动的便签ID集合 + * @param folderId 目标文件夹ID + * @return true表示移动成功,false表示移动失败 + */ public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, - long folderId) { + long folderId) { if (ids == null) { Log.d(TAG, "the ids is null"); - return true; + return true; // 空参数视为成功 } ArrayList operationList = new ArrayList(); for (long id : ids) { ContentProviderOperation.Builder builder = ContentProviderOperation .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); - builder.withValue(NoteColumns.PARENT_ID, folderId); - builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); + builder.withValue(NoteColumns.PARENT_ID, folderId); // 设置新父文件夹 + builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); // 标记为本地修改 operationList.add(builder.build()); } @@ -112,7 +161,12 @@ public class DataUtils { } /** - * Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}} + * 获取用户文件夹数量(排除系统文件夹) + * + * 统计用户创建的自定义文件夹数量,不包括系统文件夹和回收站 + * + * @param resolver 内容解析器 + * @return 用户文件夹数量,查询失败时返回0 */ public static int getUserFolderCount(ContentResolver resolver) { Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI, @@ -136,6 +190,16 @@ public class DataUtils { return count; } + /** + * 检查指定类型便签在数据库中是否可见(不在回收站中) + * + * 用于验证便签是否存在于数据库中且未被放入回收站 + * + * @param resolver 内容解析器 + * @param noteId 要检查的便签ID + * @param type 便签类型(Notes.TYPE_NOTE或Notes.TYPE_FOLDER) + * @return true表示便签存在且不在回收站中,false表示不存在或在回收站中 + */ public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null, @@ -153,6 +217,15 @@ public class DataUtils { return exist; } + /** + * 检查便签是否存在于数据库中 + * + * 不检查便签是否在回收站中,只验证ID是否存在 + * + * @param resolver 内容解析器 + * @param noteId 要检查的便签ID + * @return true表示便签ID存在,false表示不存在 + */ public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null, null, null, null); @@ -167,6 +240,15 @@ public class DataUtils { return exist; } + /** + * 检查数据记录是否存在于数据表中 + * + * 用于验证数据ID是否可用,避免ID冲突 + * + * @param resolver 内容解析器 + * @param dataId 要检查的数据记录ID + * @return true表示数据ID存在,false表示不存在 + */ public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), null, null, null, null); @@ -181,11 +263,20 @@ public class DataUtils { return exist; } + /** + * 检查指定文件夹名称是否已存在(在可见文件夹中) + * + * 用于创建新文件夹时的名称重复性检查,不检查回收站中的文件夹 + * + * @param resolver 内容解析器 + * @param name 要检查的文件夹名称 + * @return true表示同名文件夹已存在,false表示不存在 + */ public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null, NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + - " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + - " AND " + NoteColumns.SNIPPET + "=?", + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.SNIPPET + "=?", new String[] { name }, null); boolean exist = false; if(cursor != null) { @@ -197,6 +288,15 @@ public class DataUtils { return exist; } + /** + * 获取指定文件夹下所有便签关联的小部件属性 + * + * 用于文件夹删除或移动时,更新关联的小部件显示 + * + * @param resolver 内容解析器 + * @param folderId 文件夹ID + * @return 小部件属性集合,没有关联小部件时返回null + */ public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, @@ -224,6 +324,15 @@ public class DataUtils { return set; } + /** + * 根据便签ID获取关联的通话记录电话号码 + * + * 用于通话记录便签的显示和查询 + * + * @param resolver 内容解析器 + * @param noteId 便签ID + * @return 电话号码字符串,未找到时返回空字符串 + */ public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, new String [] { CallNote.PHONE_NUMBER }, @@ -240,14 +349,25 @@ public class DataUtils { cursor.close(); } } - return ""; + return ""; // 未找到通话记录或查询失败 } + /** + * 根据电话号码和通话时间获取便签ID + * + * 用于检查是否存在相同通话记录,避免重复创建 + * 使用自定义SQL函数PHONE_NUMBERS_EQUAL进行电话号码匹配 + * + * @param resolver 内容解析器 + * @param phoneNumber 电话号码 + * @param callDate 通话时间戳 + * @return 便签ID,未找到时返回0 + */ public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, new String [] { CallNote.NOTE_ID }, CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" - + CallNote.PHONE_NUMBER + ",?)", + + CallNote.PHONE_NUMBER + ",?)", new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, null); @@ -261,9 +381,19 @@ public class DataUtils { } cursor.close(); } - return 0; + return 0; // 未找到匹配的通话记录 } + /** + * 根据便签ID获取便签片段(snippet) + * + * 便签片段通常用于列表显示,是便签内容的摘要 + * + * @param resolver 内容解析器 + * @param noteId 便签ID + * @return 便签片段字符串 + * @throws IllegalArgumentException 当便签ID不存在时抛出 + */ public static String getSnippetById(ContentResolver resolver, long noteId) { Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, new String [] { NoteColumns.SNIPPET }, @@ -282,14 +412,24 @@ public class DataUtils { throw new IllegalArgumentException("Note is not found with id: " + noteId); } + /** + * 格式化便签片段 + * + * 处理便签片段,使其适合在UI中显示: + * 1. 去除首尾空格 + * 2. 截取到第一个换行符处(如果存在) + * + * @param snippet 原始便签片段 + * @return 格式化后的便签片段 + */ public static String getFormattedSnippet(String snippet) { if (snippet != null) { - snippet = snippet.trim(); + snippet = snippet.trim(); // 去除首尾空格 int index = snippet.indexOf('\n'); if (index != -1) { - snippet = snippet.substring(0, index); + snippet = snippet.substring(0, index); // 截取到第一个换行符 } } return snippet; } -} +} \ No newline at end of file diff --git a/src/tool/GTaskStringUtils.java b/src/tool/GTaskStringUtils.java index 666b729..680e064 100644 --- a/src/tool/GTaskStringUtils.java +++ b/src/tool/GTaskStringUtils.java @@ -16,98 +16,106 @@ package net.micode.notes.tool; +/** + * Google Tasks API字符串常量工具类 + * + * 定义与Google Tasks API交互时使用的所有JSON键名、操作类型和特殊标识符 + * 此类主要用于: + * 1. 提供与Google Tasks API通信时的标准化键名 + * 2. 定义MIUI便签的特殊文件夹和元数据标识 + * 3. 统一管理API相关字符串,避免硬编码 + */ public class GTaskStringUtils { - public final static String GTASK_JSON_ACTION_ID = "action_id"; - - public final static String GTASK_JSON_ACTION_LIST = "action_list"; - - public final static String GTASK_JSON_ACTION_TYPE = "action_type"; - - public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create"; - - public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all"; - - public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move"; - - public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update"; - - public final static String GTASK_JSON_CREATOR_ID = "creator_id"; - - public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; - - public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; - - public final static String GTASK_JSON_COMPLETED = "completed"; - - public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; - - public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; - - public final static String GTASK_JSON_DELETED = "deleted"; - - public final static String GTASK_JSON_DEST_LIST = "dest_list"; - - public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; - - public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; - - public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; - - public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; - - public final static String GTASK_JSON_GET_DELETED = "get_deleted"; - - public final static String GTASK_JSON_ID = "id"; - - public final static String GTASK_JSON_INDEX = "index"; - - public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; - - public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; - - public final static String GTASK_JSON_LIST_ID = "list_id"; - - public final static String GTASK_JSON_LISTS = "lists"; - - public final static String GTASK_JSON_NAME = "name"; - - public final static String GTASK_JSON_NEW_ID = "new_id"; - - public final static String GTASK_JSON_NOTES = "notes"; - - public final static String GTASK_JSON_PARENT_ID = "parent_id"; - - public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; - - public final static String GTASK_JSON_RESULTS = "results"; - - public final static String GTASK_JSON_SOURCE_LIST = "source_list"; - - public final static String GTASK_JSON_TASKS = "tasks"; - - public final static String GTASK_JSON_TYPE = "type"; - - public final static String GTASK_JSON_TYPE_GROUP = "GROUP"; - - public final static String GTASK_JSON_TYPE_TASK = "TASK"; - - public final static String GTASK_JSON_USER = "user"; + public final static String GTASK_JSON_ACTION_ID = "action_id"; // 操作ID标识 + public final static String GTASK_JSON_ACTION_LIST = "action_list"; // 操作列表标识 + public final static String GTASK_JSON_ACTION_TYPE = "action_type"; // 操作类型标识 + public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create"; // 创建操作类型 + public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all"; // 获取所有操作类型 + public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move"; // 移动操作类型 + public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update"; // 更新操作类型 + + public final static String GTASK_JSON_CREATOR_ID = "creator_id"; // 创建者ID标识 + public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; // 子实体标识 + public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; // 客户端版本标识 + public final static String GTASK_JSON_COMPLETED = "completed"; // 完成状态标识 + public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; // 当前列表ID标识 + public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; // 默认列表ID标识 + public final static String GTASK_JSON_DELETED = "deleted"; // 删除状态标识 + public final static String GTASK_JSON_DEST_LIST = "dest_list"; // 目标列表标识 + public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; // 目标父级标识 + public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; // 目标父级类型标识 + public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; // 实体增量标识 + public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; // 实体类型标识 + public final static String GTASK_JSON_GET_DELETED = "get_deleted"; // 获取已删除项标识 + public final static String GTASK_JSON_ID = "id"; // ID标识 + public final static String GTASK_JSON_INDEX = "index"; // 索引标识 + public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; // 最后修改时间标识 + + public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; // 最新同步点标识 + public final static String GTASK_JSON_LIST_ID = "list_id"; // 列表ID标识 + public final static String GTASK_JSON_LISTS = "lists"; // 列表集合标识 + public final static String GTASK_JSON_NAME = "name"; // 名称标识 + public final static String GTASK_JSON_NEW_ID = "new_id"; // 新ID标识 + public final static String GTASK_JSON_NOTES = "notes"; // 备注标识 + public final static String GTASK_JSON_PARENT_ID = "parent_id"; // 父级ID标识 + public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; // 前一个兄弟ID标识 + public final static String GTASK_JSON_RESULTS = "results"; // 结果集合标识 + public final static String GTASK_JSON_SOURCE_LIST = "source_list"; // 源列表标识 + public final static String GTASK_JSON_TASKS = "tasks"; // 任务集合标识 + public final static String GTASK_JSON_TYPE = "type"; // 类型标识 + public final static String GTASK_JSON_TYPE_GROUP = "GROUP"; // 组类型标识 + public final static String GTASK_JSON_TYPE_TASK = "TASK"; // 任务类型标识 + public final static String GTASK_JSON_USER = "user"; // 用户标识 + + + /** + * MIUI便签文件夹前缀 + * 用于标识由MIUI便签创建的文件夹,避免与其他Google Tasks应用冲突 + */ public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; + /** + * 默认文件夹名称 + * 用于标识根目录文件夹在Google Tasks中的名称 + */ public final static String FOLDER_DEFAULT = "Default"; + /** + * 通话记录文件夹名称 + * 用于标识通话记录便签文件夹在Google Tasks中的名称 + */ public final static String FOLDER_CALL_NOTE = "Call_Note"; + /** + * 元数据文件夹名称 + * 用于存储便签的元数据信息,如图片、附件等 + */ public final static String FOLDER_META = "METADATA"; + + /** + * 元数据头:Google Tasks ID + * 用于在元数据中存储便签对应的Google Tasks ID + */ public final static String META_HEAD_GTASK_ID = "meta_gid"; + /** + * 元数据头:便签信息 + * 用于在元数据中存储便签的基本信息 + */ public final static String META_HEAD_NOTE = "meta_note"; + /** + * 元数据头:数据信息 + * 用于在元数据中存储便签的具体数据内容 + */ public final static String META_HEAD_DATA = "meta_data"; + /** + * 元数据便签名称 + * 用于标识元数据便签,提醒用户不要修改或删除此便签 + */ public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; - -} +} \ No newline at end of file diff --git a/src/tool/ResourceParser.java b/src/tool/ResourceParser.java index 1ad3ad6..635b263 100644 --- a/src/tool/ResourceParser.java +++ b/src/tool/ResourceParser.java @@ -22,38 +22,47 @@ import android.preference.PreferenceManager; import net.micode.notes.R; import net.micode.notes.ui.NotesPreferenceActivity; +/** + * ResourceParser - 资源解析工具类 + * 管理和解析便签应用的UI资源,包括背景颜色、字体大小等 + */ public class ResourceParser { + // 背景颜色ID常量 public static final int YELLOW = 0; public static final int BLUE = 1; public static final int WHITE = 2; public static final int GREEN = 3; public static final int RED = 4; - public static final int BG_DEFAULT_COLOR = YELLOW; + // 字体大小ID常量 public static final int TEXT_SMALL = 0; public static final int TEXT_MEDIUM = 1; public static final int TEXT_LARGE = 2; public static final int TEXT_SUPER = 3; - public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM; + /** + * NoteBgResources - 便签背景资源管理 + */ public static class NoteBgResources { + // 编辑界面便签背景资源数组 private final static int [] BG_EDIT_RESOURCES = new int [] { - R.drawable.edit_yellow, - R.drawable.edit_blue, - R.drawable.edit_white, - R.drawable.edit_green, - R.drawable.edit_red + R.drawable.edit_yellow, + R.drawable.edit_blue, + R.drawable.edit_white, + R.drawable.edit_green, + R.drawable.edit_red }; + // 编辑界面便签标题背景资源数组 private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] { - R.drawable.edit_title_yellow, - R.drawable.edit_title_blue, - R.drawable.edit_title_white, - R.drawable.edit_title_green, - R.drawable.edit_title_red + R.drawable.edit_title_yellow, + R.drawable.edit_title_blue, + R.drawable.edit_title_white, + R.drawable.edit_title_green, + R.drawable.edit_title_red }; public static int getNoteBgResource(int id) { @@ -65,6 +74,10 @@ public class ResourceParser { } } + /** + * 获取默认背景颜色ID + * 根据用户偏好设置:启用随机背景色则随机返回,否则返回默认颜色 + */ public static int getDefaultBgId(Context context) { if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { @@ -74,37 +87,40 @@ public class ResourceParser { } } + /** + * NoteItemBgResources - 便签列表项背景资源管理 + */ public static class NoteItemBgResources { private final static int [] BG_FIRST_RESOURCES = new int [] { - R.drawable.list_yellow_up, - R.drawable.list_blue_up, - R.drawable.list_white_up, - R.drawable.list_green_up, - R.drawable.list_red_up + R.drawable.list_yellow_up, + R.drawable.list_blue_up, + R.drawable.list_white_up, + R.drawable.list_green_up, + R.drawable.list_red_up }; private final static int [] BG_NORMAL_RESOURCES = new int [] { - R.drawable.list_yellow_middle, - R.drawable.list_blue_middle, - R.drawable.list_white_middle, - R.drawable.list_green_middle, - R.drawable.list_red_middle + R.drawable.list_yellow_middle, + R.drawable.list_blue_middle, + R.drawable.list_white_middle, + R.drawable.list_green_middle, + R.drawable.list_red_middle }; private final static int [] BG_LAST_RESOURCES = new int [] { - R.drawable.list_yellow_down, - R.drawable.list_blue_down, - R.drawable.list_white_down, - R.drawable.list_green_down, - R.drawable.list_red_down, + R.drawable.list_yellow_down, + R.drawable.list_blue_down, + R.drawable.list_white_down, + R.drawable.list_green_down, + R.drawable.list_red_down, }; private final static int [] BG_SINGLE_RESOURCES = new int [] { - R.drawable.list_yellow_single, - R.drawable.list_blue_single, - R.drawable.list_white_single, - R.drawable.list_green_single, - R.drawable.list_red_single + R.drawable.list_yellow_single, + R.drawable.list_blue_single, + R.drawable.list_white_single, + R.drawable.list_green_single, + R.drawable.list_red_single }; public static int getNoteBgFirstRes(int id) { @@ -128,13 +144,16 @@ public class ResourceParser { } } + /** + * WidgetBgResources - 小部件背景资源管理 + */ public static class WidgetBgResources { private final static int [] BG_2X_RESOURCES = new int [] { - R.drawable.widget_2x_yellow, - R.drawable.widget_2x_blue, - R.drawable.widget_2x_white, - R.drawable.widget_2x_green, - R.drawable.widget_2x_red, + R.drawable.widget_2x_yellow, + R.drawable.widget_2x_blue, + R.drawable.widget_2x_white, + R.drawable.widget_2x_green, + R.drawable.widget_2x_red, }; public static int getWidget2xBgResource(int id) { @@ -142,11 +161,11 @@ public class ResourceParser { } private final static int [] BG_4X_RESOURCES = new int [] { - R.drawable.widget_4x_yellow, - R.drawable.widget_4x_blue, - R.drawable.widget_4x_white, - R.drawable.widget_4x_green, - R.drawable.widget_4x_red + R.drawable.widget_4x_yellow, + R.drawable.widget_4x_blue, + R.drawable.widget_4x_white, + R.drawable.widget_4x_green, + R.drawable.widget_4x_red }; public static int getWidget4xBgResource(int id) { @@ -154,20 +173,22 @@ public class ResourceParser { } } + /** + * TextAppearanceResources - 文本外观资源管理 + */ public static class TextAppearanceResources { private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] { - R.style.TextAppearanceNormal, - R.style.TextAppearanceMedium, - R.style.TextAppearanceLarge, - R.style.TextAppearanceSuper + R.style.TextAppearanceNormal, + R.style.TextAppearanceMedium, + R.style.TextAppearanceLarge, + R.style.TextAppearanceSuper }; + /** + * 根据字体大小ID获取文本外观样式资源 + * 安全机制:ID超出范围时返回默认字体大小 + */ public static int getTexAppearanceResource(int id) { - /** - * HACKME: Fix bug of store the resource id in shared preference. - * The id may larger than the length of resources, in this case, - * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} - */ if (id >= TEXTAPPEARANCE_RESOURCES.length) { return BG_DEFAULT_FONT_SIZE; } @@ -178,4 +199,4 @@ public class ResourceParser { return TEXTAPPEARANCE_RESOURCES.length; } } -} +} \ No newline at end of file diff --git a/src/ui/NotesListItem.java b/src/ui/NotesListItem.java index 1221e80..18a6a54 100644 --- a/src/ui/NotesListItem.java +++ b/src/ui/NotesListItem.java @@ -1,17 +1,15 @@ /* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * 版权所有 (c) 2010-2011,The MiCode 开源社区 (www.micode.net) * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * 根据 Apache 许可证 2.0 版本("许可证")授权; + * 除非遵守许可证,否则不得使用此文件。 + * 您可以在以下网址获取许可证副本: * * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * 除非适用法律要求或书面同意,否则按"原样"分发软件, + * 没有任何明示或暗示的担保或条件。 + * 有关许可证下权限和限制的具体语言,请参阅许可证。 */ package net.micode.notes.ui; @@ -29,18 +27,28 @@ import net.micode.notes.data.Notes; import net.micode.notes.tool.DataUtils; import net.micode.notes.tool.ResourceParser.NoteItemBgResources; - +/** + * 笔记列表项视图类 + * 继承自LinearLayout,表示笔记列表中的单个项 + * 负责显示笔记的标题、时间、提醒图标等信息 + */ public class NotesListItem extends LinearLayout { - private ImageView mAlert; - private TextView mTitle; - private TextView mTime; - private TextView mCallName; - private NoteItemData mItemData; - private CheckBox mCheckBox; + private ImageView mAlert; // 提醒图标 + private TextView mTitle; // 笔记标题 + private TextView mTime; // 笔记修改时间 + private TextView mCallName; // 通话记录名称(用于通话记录类型的笔记) + private NoteItemData mItemData; // 笔记数据对象 + private CheckBox mCheckBox; // 复选框(用于选择模式) + /** + * 构造函数 + * @param context 上下文环境 + */ public NotesListItem(Context context) { super(context); + // 从布局文件note_item.xml中加载视图 inflate(context, R.layout.note_item, this); + // 初始化各个视图组件 mAlert = (ImageView) findViewById(R.id.iv_alert_icon); mTitle = (TextView) findViewById(R.id.tv_title); mTime = (TextView) findViewById(R.id.tv_time); @@ -48,75 +56,112 @@ public class NotesListItem extends LinearLayout { mCheckBox = (CheckBox) findViewById(android.R.id.checkbox); } + /** + * 绑定数据到视图 + * 根据笔记类型和状态设置不同的显示方式 + * @param context 上下文环境 + * @param data 笔记数据对象 + * @param choiceMode 是否处于选择模式 + * @param checked 是否被选中 + */ public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) { + // 设置复选框的显示状态 if (choiceMode && data.getType() == Notes.TYPE_NOTE) { - mCheckBox.setVisibility(View.VISIBLE); - mCheckBox.setChecked(checked); + mCheckBox.setVisibility(View.VISIBLE); // 选择模式且为普通笔记时显示复选框 + mCheckBox.setChecked(checked); // 设置选中状态 } else { - mCheckBox.setVisibility(View.GONE); + mCheckBox.setVisibility(View.GONE); // 其他情况隐藏复选框 } - mItemData = data; + mItemData = data; // 保存数据引用 + + // 根据笔记类型和父文件夹ID设置不同的显示方式 if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { - mCallName.setVisibility(View.GONE); - mAlert.setVisibility(View.VISIBLE); + // 通话记录文件夹 + mCallName.setVisibility(View.GONE); // 隐藏通话记录名称 + mAlert.setVisibility(View.VISIBLE); // 显示提醒图标 mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); + // 设置文件夹标题,显示通话记录文件夹名称和笔记数量 mTitle.setText(context.getString(R.string.call_record_folder_name) + context.getString(R.string.format_folder_files_count, data.getNotesCount())); - mAlert.setImageResource(R.drawable.call_record); + mAlert.setImageResource(R.drawable.call_record); // 设置通话记录图标 } else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) { - mCallName.setVisibility(View.VISIBLE); - mCallName.setText(data.getCallName()); + // 通话记录文件夹中的笔记 + mCallName.setVisibility(View.VISIBLE); // 显示通话记录名称 + mCallName.setText(data.getCallName()); // 设置通话记录名称 mTitle.setTextAppearance(context,R.style.TextAppearanceSecondaryItem); - mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); + mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); // 设置标题为笔记内容片段 + // 根据是否有提醒设置提醒图标 if (data.hasAlert()) { - mAlert.setImageResource(R.drawable.clock); + mAlert.setImageResource(R.drawable.clock); // 有时钟图标 mAlert.setVisibility(View.VISIBLE); } else { mAlert.setVisibility(View.GONE); } } else { - mCallName.setVisibility(View.GONE); + // 普通笔记或文件夹 + mCallName.setVisibility(View.GONE); // 隐藏通话记录名称 mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); if (data.getType() == Notes.TYPE_FOLDER) { - mTitle.setText(data.getSnippet() + // 文件夹类型 + mTitle.setText(data.getSnippet() // 设置文件夹名称 + context.getString(R.string.format_folder_files_count, - data.getNotesCount())); - mAlert.setVisibility(View.GONE); + data.getNotesCount())); // 添加笔记数量 + mAlert.setVisibility(View.GONE); // 文件夹不显示提醒图标 } else { - mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); + // 普通笔记类型 + mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); // 设置笔记内容片段 + // 根据是否有提醒设置提醒图标 if (data.hasAlert()) { - mAlert.setImageResource(R.drawable.clock); + mAlert.setImageResource(R.drawable.clock); // 有时钟图标 mAlert.setVisibility(View.VISIBLE); } else { mAlert.setVisibility(View.GONE); } } } + // 设置相对时间(如"5分钟前"、"昨天"等格式) mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate())); + // 设置背景 setBackground(data); } + /** + * 根据笔记数据设置背景 + * 根据笔记的位置(第一个、最后一个、中间等)和颜色ID设置不同的背景 + * @param data 笔记数据对象 + */ private void setBackground(NoteItemData data) { - int id = data.getBgColorId(); + int id = data.getBgColorId(); // 获取背景颜色ID + if (data.getType() == Notes.TYPE_NOTE) { + // 普通笔记类型 if (data.isSingle() || data.isOneFollowingFolder()) { + // 单个笔记或紧接文件夹后的单个笔记:使用单一样式背景 setBackgroundResource(NoteItemBgResources.getNoteBgSingleRes(id)); } else if (data.isLast()) { + // 最后一个笔记:使用最后一项样式背景 setBackgroundResource(NoteItemBgResources.getNoteBgLastRes(id)); } else if (data.isFirst() || data.isMultiFollowingFolder()) { + // 第一个笔记或多个笔记在文件夹后:使用第一项样式背景 setBackgroundResource(NoteItemBgResources.getNoteBgFirstRes(id)); } else { + // 中间笔记:使用普通样式背景 setBackgroundResource(NoteItemBgResources.getNoteBgNormalRes(id)); } } else { + // 文件夹类型:使用文件夹背景 setBackgroundResource(NoteItemBgResources.getFolderBgRes()); } } + /** + * 获取笔记数据对象 + * @return 当前笔记的数据对象 + */ public NoteItemData getItemData() { return mItemData; } -} +} \ No newline at end of file diff --git a/src/ui/NotesPreferenceActivity.java b/src/ui/NotesPreferenceActivity.java index 07c5f7e..aaafbd3 100644 --- a/src/ui/NotesPreferenceActivity.java +++ b/src/ui/NotesPreferenceActivity.java @@ -1,17 +1,15 @@ /* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * 版权所有 (c) 2010-2011,The MiCode 开源社区 (www.micode.net) * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * 根据 Apache 许可证 2.0 版本("许可证")授权; + * 除非遵守许可证,否则不得使用此文件。 + * 您可以在以下网址获取许可证副本: * * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * 除非适用法律要求或书面同意,否则按"原样"分发软件, + * 没有任何明示或暗示的担保或条件。 + * 有关许可证下权限和限制的具体语言,请参阅许可证。 */ package net.micode.notes.ui; @@ -47,342 +45,388 @@ import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.NoteColumns; import net.micode.notes.gtask.remote.GTaskSyncService; - +/** + * 笔记应用设置页面Activity + * 继承自PreferenceActivity,用于管理应用的偏好设置 + * 主要功能:同步账户设置、同步状态显示、同步操作等 + */ public class NotesPreferenceActivity extends PreferenceActivity { - public static final String PREFERENCE_NAME = "notes_preferences"; - - public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; - - public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; - - public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; - - private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; - - private static final String AUTHORITIES_FILTER_KEY = "authorities"; - - private PreferenceCategory mAccountCategory; - - private GTaskReceiver mReceiver; - - private Account[] mOriAccounts; - - private boolean mHasAddedAccount; + public static final String PREFERENCE_NAME = "notes_preferences"; // 偏好设置文件名 + public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; // 同步账户名称键 + public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; // 上次同步时间键 + public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; // 背景颜色设置键 + private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; // 同步账户类别键 + private static final String AUTHORITIES_FILTER_KEY = "authorities"; // 账户权限过滤器键 + + private PreferenceCategory mAccountCategory; // 账户设置分类 + private GTaskReceiver mReceiver; // 同步服务广播接收器 + private Account[] mOriAccounts; // 原始账户列表 + private boolean mHasAddedAccount; // 是否添加了新账户的标志 @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); - /* using the app icon for navigation */ - getActionBar().setDisplayHomeAsUpEnabled(true); + /* 使用应用图标进行导航 */ + getActionBar().setDisplayHomeAsUpEnabled(true); // 显示返回主页按钮 - addPreferencesFromResource(R.xml.preferences); - mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY); - mReceiver = new GTaskReceiver(); - IntentFilter filter = new IntentFilter(); - filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME); - registerReceiver(mReceiver, filter); + addPreferencesFromResource(R.xml.preferences); // 从XML资源加载偏好设置 + mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY); // 查找账户设置分类 + mReceiver = new GTaskReceiver(); // 创建广播接收器 + IntentFilter filter = new IntentFilter(); // 创建Intent过滤器 + filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME); // 添加同步服务广播动作 + registerReceiver(mReceiver, filter); // 注册广播接收器 - mOriAccounts = null; - View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null); - getListView().addHeaderView(header, null, true); + mOriAccounts = null; // 初始化原始账户列表 + View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null); // 加载设置页面头部布局 + getListView().addHeaderView(header, null, true); // 将头部添加到列表视图 } @Override protected void onResume() { super.onResume(); - // need to set sync account automatically if user has added a new - // account + // 如果用户添加了新账户,需要自动设置同步账户 if (mHasAddedAccount) { - Account[] accounts = getGoogleAccounts(); + Account[] accounts = getGoogleAccounts(); // 获取当前所有Google账户 if (mOriAccounts != null && accounts.length > mOriAccounts.length) { + // 检查是否有新账户被添加 for (Account accountNew : accounts) { boolean found = false; for (Account accountOld : mOriAccounts) { if (TextUtils.equals(accountOld.name, accountNew.name)) { - found = true; + found = true; // 账户已存在 break; } } if (!found) { - setSyncAccount(accountNew.name); + setSyncAccount(accountNew.name); // 设置新账户为同步账户 break; } } } } - refreshUI(); + refreshUI(); // 刷新UI } @Override protected void onDestroy() { if (mReceiver != null) { - unregisterReceiver(mReceiver); + unregisterReceiver(mReceiver); // 取消注册广播接收器 } super.onDestroy(); } + /** + * 加载账户设置项 + */ private void loadAccountPreference() { - mAccountCategory.removeAll(); + mAccountCategory.removeAll(); // 清除所有现有设置项 - Preference accountPref = new Preference(this); - final String defaultAccount = getSyncAccountName(this); - accountPref.setTitle(getString(R.string.preferences_account_title)); - accountPref.setSummary(getString(R.string.preferences_account_summary)); + Preference accountPref = new Preference(this); // 创建账户设置项 + final String defaultAccount = getSyncAccountName(this); // 获取当前同步账户名称 + accountPref.setTitle(getString(R.string.preferences_account_title)); // 设置标题 + accountPref.setSummary(getString(R.string.preferences_account_summary)); // 设置摘要 accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { - if (!GTaskSyncService.isSyncing()) { + if (!GTaskSyncService.isSyncing()) { // 检查是否正在同步 if (TextUtils.isEmpty(defaultAccount)) { - // the first time to set account - showSelectAccountAlertDialog(); + // 首次设置账户 + showSelectAccountAlertDialog(); // 显示选择账户对话框 } else { - // if the account has already been set, we need to promp - // user about the risk - showChangeAccountConfirmAlertDialog(); + // 如果账户已经设置,需要提示用户风险 + showChangeAccountConfirmAlertDialog(); // 显示更改账户确认对话框 } } else { Toast.makeText(NotesPreferenceActivity.this, - R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT) - .show(); + R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT) + .show(); // 显示无法更改账户的提示 } return true; } }); - mAccountCategory.addPreference(accountPref); + mAccountCategory.addPreference(accountPref); // 将设置项添加到分类 } + /** + * 加载同步按钮 + */ private void loadSyncButton() { - Button syncButton = (Button) findViewById(R.id.preference_sync_button); - TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview); + Button syncButton = (Button) findViewById(R.id.preference_sync_button); // 同步按钮 + TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview); // 上次同步时间显示 - // set button state + // 设置按钮状态 if (GTaskSyncService.isSyncing()) { - syncButton.setText(getString(R.string.preferences_button_sync_cancel)); + syncButton.setText(getString(R.string.preferences_button_sync_cancel)); // 同步中显示取消 syncButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - GTaskSyncService.cancelSync(NotesPreferenceActivity.this); + GTaskSyncService.cancelSync(NotesPreferenceActivity.this); // 取消同步 } }); } else { - syncButton.setText(getString(R.string.preferences_button_sync_immediately)); + syncButton.setText(getString(R.string.preferences_button_sync_immediately)); // 未同步显示立即同步 syncButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - GTaskSyncService.startSync(NotesPreferenceActivity.this); + GTaskSyncService.startSync(NotesPreferenceActivity.this); // 开始同步 } }); } - syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this))); + syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this))); // 有同步账户时启用按钮 - // set last sync time + // 设置上次同步时间 if (GTaskSyncService.isSyncing()) { - lastSyncTimeView.setText(GTaskSyncService.getProgressString()); + lastSyncTimeView.setText(GTaskSyncService.getProgressString()); // 显示同步进度 lastSyncTimeView.setVisibility(View.VISIBLE); } else { - long lastSyncTime = getLastSyncTime(this); + long lastSyncTime = getLastSyncTime(this); // 获取上次同步时间 if (lastSyncTime != 0) { lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time, DateFormat.format(getString(R.string.preferences_last_sync_time_format), - lastSyncTime))); + lastSyncTime))); // 格式化显示上次同步时间 lastSyncTimeView.setVisibility(View.VISIBLE); } else { - lastSyncTimeView.setVisibility(View.GONE); + lastSyncTimeView.setVisibility(View.GONE); // 从未同步过则隐藏 } } } + /** + * 刷新UI + */ private void refreshUI() { - loadAccountPreference(); - loadSyncButton(); + loadAccountPreference(); // 重新加载账户设置项 + loadSyncButton(); // 重新加载同步按钮 } + /** + * 显示选择账户对话框 + */ private void showSelectAccountAlertDialog() { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); - View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); - TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); - titleTextView.setText(getString(R.string.preferences_dialog_select_account_title)); - TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); - subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips)); + View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); // 加载对话框标题布局 + TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); // 标题文本 + titleTextView.setText(getString(R.string.preferences_dialog_select_account_title)); // 设置标题 + TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); // 副标题文本 + subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips)); // 设置副标题 - dialogBuilder.setCustomTitle(titleView); - dialogBuilder.setPositiveButton(null, null); + dialogBuilder.setCustomTitle(titleView); // 设置自定义标题 + dialogBuilder.setPositiveButton(null, null); // 不设置确定按钮 - Account[] accounts = getGoogleAccounts(); - String defAccount = getSyncAccountName(this); + Account[] accounts = getGoogleAccounts(); // 获取所有Google账户 + String defAccount = getSyncAccountName(this); // 获取当前同步账户 - mOriAccounts = accounts; - mHasAddedAccount = false; + mOriAccounts = accounts; // 保存原始账户列表 + mHasAddedAccount = false; // 重置添加账户标志 if (accounts.length > 0) { - CharSequence[] items = new CharSequence[accounts.length]; - final CharSequence[] itemMapping = items; - int checkedItem = -1; + CharSequence[] items = new CharSequence[accounts.length]; // 创建选项数组 + final CharSequence[] itemMapping = items; // 映射选项 + int checkedItem = -1; // 默认未选中 int index = 0; for (Account account : accounts) { if (TextUtils.equals(account.name, defAccount)) { - checkedItem = index; + checkedItem = index; // 设置当前同步账户为选中状态 } - items[index++] = account.name; + items[index++] = account.name; // 添加账户名称到选项 } dialogBuilder.setSingleChoiceItems(items, checkedItem, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - setSyncAccount(itemMapping[which].toString()); - dialog.dismiss(); - refreshUI(); + setSyncAccount(itemMapping[which].toString()); // 设置选中的账户为同步账户 + dialog.dismiss(); // 关闭对话框 + refreshUI(); // 刷新UI } }); } - View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); - dialogBuilder.setView(addAccountView); + View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); // 加载添加账户视图 + dialogBuilder.setView(addAccountView); // 设置对话框视图 - final AlertDialog dialog = dialogBuilder.show(); + final AlertDialog dialog = dialogBuilder.show(); // 显示对话框 addAccountView.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - mHasAddedAccount = true; - Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS"); + mHasAddedAccount = true; // 标记已添加账户 + Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS"); // 跳转到添加账户设置 intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] { - "gmail-ls" + "gmail-ls" // 设置账户权限过滤器 }); - startActivityForResult(intent, -1); - dialog.dismiss(); + startActivityForResult(intent, -1); // 启动添加账户Activity + dialog.dismiss(); // 关闭对话框 } }); } + /** + * 显示更改账户确认对话框 + */ private void showChangeAccountConfirmAlertDialog() { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); - View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); - TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); + View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); // 加载对话框标题布局 + TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); // 标题文本 titleTextView.setText(getString(R.string.preferences_dialog_change_account_title, - getSyncAccountName(this))); - TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); - subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg)); - dialogBuilder.setCustomTitle(titleView); + getSyncAccountName(this))); // 设置标题,包含当前账户名 + TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); // 副标题文本 + subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg)); // 设置警告消息 + + dialogBuilder.setCustomTitle(titleView); // 设置自定义标题 CharSequence[] menuItemArray = new CharSequence[] { - getString(R.string.preferences_menu_change_account), - getString(R.string.preferences_menu_remove_account), - getString(R.string.preferences_menu_cancel) + getString(R.string.preferences_menu_change_account), // 更改账户 + getString(R.string.preferences_menu_remove_account), // 移除账户 + getString(R.string.preferences_menu_cancel) // 取消 }; dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { if (which == 0) { - showSelectAccountAlertDialog(); + showSelectAccountAlertDialog(); // 显示选择账户对话框 } else if (which == 1) { - removeSyncAccount(); - refreshUI(); + removeSyncAccount(); // 移除同步账户 + refreshUI(); // 刷新UI } + // 选项2为取消,不执行任何操作 } }); - dialogBuilder.show(); + dialogBuilder.show(); // 显示对话框 } + /** + * 获取所有Google账户 + * @return Google账户数组 + */ private Account[] getGoogleAccounts() { - AccountManager accountManager = AccountManager.get(this); - return accountManager.getAccountsByType("com.google"); + AccountManager accountManager = AccountManager.get(this); // 获取账户管理器 + return accountManager.getAccountsByType("com.google"); // 返回Google类型账户 } + /** + * 设置同步账户 + * @param account 账户名称 + */ private void setSyncAccount(String account) { - if (!getSyncAccountName(this).equals(account)) { - SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = settings.edit(); + if (!getSyncAccountName(this).equals(account)) { // 检查账户是否已更改 + SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); // 获取偏好设置 + SharedPreferences.Editor editor = settings.edit(); // 获取编辑器 if (account != null) { - editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account); + editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account); // 保存账户名称 } else { - editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); + editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); // 清空账户名称 } - editor.commit(); + editor.commit(); // 提交更改 - // clean up last sync time + // 清除上次同步时间 setLastSyncTime(this, 0); - // clean up local gtask related info + // 清除本地GTask相关信息 new Thread(new Runnable() { public void run() { ContentValues values = new ContentValues(); - values.put(NoteColumns.GTASK_ID, ""); - values.put(NoteColumns.SYNC_ID, 0); - getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); + values.put(NoteColumns.GTASK_ID, ""); // 清空GTask ID + values.put(NoteColumns.SYNC_ID, 0); // 清空同步ID + getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); // 更新数据库 } }).start(); Toast.makeText(NotesPreferenceActivity.this, getString(R.string.preferences_toast_success_set_accout, account), - Toast.LENGTH_SHORT).show(); + Toast.LENGTH_SHORT).show(); // 显示设置成功提示 } } + /** + * 移除同步账户 + */ private void removeSyncAccount() { - SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = settings.edit(); + SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); // 获取偏好设置 + SharedPreferences.Editor editor = settings.edit(); // 获取编辑器 if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) { - editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME); + editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME); // 移除同步账户名称 } if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) { - editor.remove(PREFERENCE_LAST_SYNC_TIME); + editor.remove(PREFERENCE_LAST_SYNC_TIME); // 移除上次同步时间 } - editor.commit(); + editor.commit(); // 提交更改 - // clean up local gtask related info + // 清除本地GTask相关信息 new Thread(new Runnable() { public void run() { ContentValues values = new ContentValues(); - values.put(NoteColumns.GTASK_ID, ""); - values.put(NoteColumns.SYNC_ID, 0); - getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); + values.put(NoteColumns.GTASK_ID, ""); // 清空GTask ID + values.put(NoteColumns.SYNC_ID, 0); // 清空同步ID + getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); // 更新数据库 } }).start(); } + /** + * 获取同步账户名称 + * @param context 上下文 + * @return 同步账户名称,如果没有则为空字符串 + */ public static String getSyncAccountName(Context context) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, - Context.MODE_PRIVATE); - return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); + Context.MODE_PRIVATE); // 获取偏好设置 + return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); // 返回账户名称 } + /** + * 设置上次同步时间 + * @param context 上下文 + * @param time 同步时间戳 + */ public static void setLastSyncTime(Context context, long time) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, - Context.MODE_PRIVATE); - SharedPreferences.Editor editor = settings.edit(); - editor.putLong(PREFERENCE_LAST_SYNC_TIME, time); - editor.commit(); + Context.MODE_PRIVATE); // 获取偏好设置 + SharedPreferences.Editor editor = settings.edit(); // 获取编辑器 + editor.putLong(PREFERENCE_LAST_SYNC_TIME, time); // 保存同步时间 + editor.commit(); // 提交更改 } + /** + * 获取上次同步时间 + * @param context 上下文 + * @return 上次同步时间,如果没有则为0 + */ public static long getLastSyncTime(Context context) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, - Context.MODE_PRIVATE); - return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0); + Context.MODE_PRIVATE); // 获取偏好设置 + return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0); // 返回同步时间 } + /** + * GTask同步服务广播接收器 + * 用于接收同步状态更新并刷新UI + */ private class GTaskReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - refreshUI(); + refreshUI(); // 刷新UI if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) { - TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview); + TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview); // 同步状态文本 syncStatus.setText(intent - .getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG)); + .getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG)); // 更新进度消息 } - } } + /** + * 处理选项菜单项选择 + * @param item 被选中的菜单项 + * @return 是否处理了该菜单项 + */ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case android.R.id.home: - Intent intent = new Intent(this, NotesListActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + case android.R.id.home: // 返回主页按钮 + Intent intent = new Intent(this, NotesListActivity.class); // 跳转到笔记列表Activity + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // 清除Activity栈 startActivity(intent); return true; default: return false; } } -} +} \ No newline at end of file diff --git a/src/widget/NoteWidgetProvider.java b/src/widget/NoteWidgetProvider.java index ec6f819..e6b5a9b 100644 --- a/src/widget/NoteWidgetProvider.java +++ b/src/widget/NoteWidgetProvider.java @@ -1,20 +1,19 @@ /* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * 版权所有 (c) 2010-2011,The MiCode 开源社区 (www.micode.net) * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * 根据 Apache 许可证 2.0 版本("许可证")授权; + * 除非遵守许可证,否则不得使用此文件。 + * 您可以在以下网址获取许可证副本: * * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * 除非适用法律要求或书面同意,否则按"原样"分发软件, + * 没有任何明示或暗示的担保或条件。 + * 有关许可证下权限和限制的具体语言,请参阅许可证。 */ package net.micode.notes.widget; + import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; @@ -32,101 +31,166 @@ import net.micode.notes.tool.ResourceParser; import net.micode.notes.ui.NoteEditActivity; import net.micode.notes.ui.NotesListActivity; +/** + * 笔记小部件提供者抽象基类 + * 继承自AppWidgetProvider,用于实现笔记应用的小部件功能 + * 处理小部件的创建、更新、删除等生命周期事件 + */ public abstract class NoteWidgetProvider extends AppWidgetProvider { + // 查询笔记信息时使用的投影(需要获取的字段) public static final String [] PROJECTION = new String [] { - NoteColumns.ID, - NoteColumns.BG_COLOR_ID, - NoteColumns.SNIPPET + NoteColumns.ID, // 笔记ID + NoteColumns.BG_COLOR_ID, // 背景颜色ID + NoteColumns.SNIPPET // 笔记内容片段 }; - public static final int COLUMN_ID = 0; - public static final int COLUMN_BG_COLOR_ID = 1; - public static final int COLUMN_SNIPPET = 2; + // 投影字段的索引常量 + public static final int COLUMN_ID = 0; // ID字段索引 + public static final int COLUMN_BG_COLOR_ID = 1; // 背景颜色ID字段索引 + public static final int COLUMN_SNIPPET = 2; // 内容片段字段索引 - private static final String TAG = "NoteWidgetProvider"; + private static final String TAG = "NoteWidgetProvider"; // 日志标签 + /** + * 当小部件被删除时调用 + * 清理数据库中对应的小部件ID + * @param context 上下文 + * @param appWidgetIds 被删除的小部件ID数组 + */ @Override public void onDeleted(Context context, int[] appWidgetIds) { ContentValues values = new ContentValues(); + // 将小部件ID设置为无效值 values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); + // 遍历所有被删除的小部件ID for (int i = 0; i < appWidgetIds.length; i++) { + // 更新数据库,清除对应的小部件ID context.getContentResolver().update(Notes.CONTENT_NOTE_URI, values, - NoteColumns.WIDGET_ID + "=?", - new String[] { String.valueOf(appWidgetIds[i])}); + NoteColumns.WIDGET_ID + "=?", // 条件:小部件ID等于被删除的小部件ID + new String[] { String.valueOf(appWidgetIds[i])}); // 参数值 } } + /** + * 获取指定小部件ID对应的笔记信息 + * @param context 上下文 + * @param widgetId 小部件ID + * @return 包含笔记信息的Cursor对象 + */ private Cursor getNoteWidgetInfo(Context context, int widgetId) { + // 查询数据库:获取指定小部件ID且不在回收站中的笔记信息 return context.getContentResolver().query(Notes.CONTENT_NOTE_URI, PROJECTION, - NoteColumns.WIDGET_ID + "=? AND " + NoteColumns.PARENT_ID + "<>?", - new String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) }, - null); + NoteColumns.WIDGET_ID + "=? AND " + NoteColumns.PARENT_ID + "<>?", // 条件 + new String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) }, // 参数值 + null); // 排序方式 } + /** + * 更新小部件(公共方法) + * @param context 上下文 + * @param appWidgetManager 小部件管理器 + * @param appWidgetIds 需要更新的小部件ID数组 + */ protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { - update(context, appWidgetManager, appWidgetIds, false); + update(context, appWidgetManager, appWidgetIds, false); // 默认非隐私模式 } + /** + * 更新小部件的私有方法 + * @param context 上下文 + * @param appWidgetManager 小部件管理器 + * @param appWidgetIds 需要更新的小部件ID数组 + * @param privacyMode 是否为隐私模式(隐私模式下显示占位文本) + */ private void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, - boolean privacyMode) { + boolean privacyMode) { + // 遍历所有需要更新的小部件 for (int i = 0; i < appWidgetIds.length; i++) { + // 检查小部件ID是否有效 if (appWidgetIds[i] != AppWidgetManager.INVALID_APPWIDGET_ID) { - int bgId = ResourceParser.getDefaultBgId(context); - String snippet = ""; - Intent intent = new Intent(context, NoteEditActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + int bgId = ResourceParser.getDefaultBgId(context); // 默认背景颜色ID + String snippet = ""; // 笔记内容片段 + Intent intent = new Intent(context, NoteEditActivity.class); // 创建编辑笔记的Intent + intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); // 设置为单例模式 + // 传递小部件ID和类型信息 intent.putExtra(Notes.INTENT_EXTRA_WIDGET_ID, appWidgetIds[i]); intent.putExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, getWidgetType()); + // 查询小部件对应的笔记信息 Cursor c = getNoteWidgetInfo(context, appWidgetIds[i]); if (c != null && c.moveToFirst()) { + // 检查是否有多条笔记对应同一个widgetId(不应该发生) if (c.getCount() > 1) { Log.e(TAG, "Multiple message with same widget id:" + appWidgetIds[i]); c.close(); return; } + // 获取笔记内容片段和背景颜色ID snippet = c.getString(COLUMN_SNIPPET); bgId = c.getInt(COLUMN_BG_COLOR_ID); + // 传递笔记ID,用于查看已有笔记 intent.putExtra(Intent.EXTRA_UID, c.getLong(COLUMN_ID)); - intent.setAction(Intent.ACTION_VIEW); + intent.setAction(Intent.ACTION_VIEW); // 设置动作为查看 } else { + // 如果没有找到对应的笔记,显示默认文本并设置为新建/编辑动作 snippet = context.getResources().getString(R.string.widget_havenot_content); - intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); // 设置动作为插入或编辑 } if (c != null) { - c.close(); + c.close(); // 关闭Cursor } + // 创建RemoteViews对象 RemoteViews rv = new RemoteViews(context.getPackageName(), getLayoutId()); + // 设置背景图片 rv.setImageViewResource(R.id.widget_bg_image, getBgResourceId(bgId)); + // 传递背景颜色ID intent.putExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, bgId); + /** - * Generate the pending intent to start host for the widget + * 生成启动宿主Activity的PendingIntent */ PendingIntent pendingIntent = null; if (privacyMode) { + // 隐私模式:显示占位文本,点击跳转到笔记列表 rv.setTextViewText(R.id.widget_text, context.getString(R.string.widget_under_visit_mode)); pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], new Intent( context, NotesListActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); } else { + // 正常模式:显示笔记内容,点击跳转到笔记编辑页面 rv.setTextViewText(R.id.widget_text, snippet); pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent, PendingIntent.FLAG_UPDATE_CURRENT); } + // 设置点击事件 rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent); + // 更新小部件 appWidgetManager.updateAppWidget(appWidgetIds[i], rv); } } } + /** + * 抽象方法:根据背景颜色ID获取对应的背景资源ID + * @param bgId 背景颜色ID + * @return 背景资源ID + */ protected abstract int getBgResourceId(int bgId); + /** + * 抽象方法:获取小部件的布局ID + * @return 布局资源ID + */ protected abstract int getLayoutId(); + /** + * 抽象方法:获取小部件类型 + * @return 小部件类型标识 + */ protected abstract int getWidgetType(); -} +} \ No newline at end of file diff --git a/src/widget/NoteWidgetProvider_2x.java b/src/widget/NoteWidgetProvider_2x.java index adcb2f7..7c278a5 100644 --- a/src/widget/NoteWidgetProvider_2x.java +++ b/src/widget/NoteWidgetProvider_2x.java @@ -1,17 +1,15 @@ /* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * 版权所有 (c) 2010-2011,The MiCode 开源社区 (www.micode.net) * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * 根据 Apache 许可证 2.0 版本("许可证")授权; + * 除非遵守许可证,否则不得使用此文件。 + * 您可以在以下网址获取许可证副本: * * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * 除非适用法律要求或书面同意,否则按"原样"分发软件, + * 没有任何明示或暗示的担保或条件。 + * 有关许可证下权限和限制的具体语言,请参阅许可证。 */ package net.micode.notes.widget; @@ -23,25 +21,51 @@ import net.micode.notes.R; import net.micode.notes.data.Notes; import net.micode.notes.tool.ResourceParser; - +/** + * 2x大小笔记小部件提供者 + * 继承自NoteWidgetProvider,专门处理2x大小的小部件 + * 实现抽象父类的具体方法,提供2x小部件的特定配置 + */ public class NoteWidgetProvider_2x extends NoteWidgetProvider { + + /** + * 当小部件需要更新时调用 + * 调用父类的update方法更新小部件 + * @param context 上下文 + * @param appWidgetManager 小部件管理器 + * @param appWidgetIds 需要更新的小部件ID数组 + */ @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { - super.update(context, appWidgetManager, appWidgetIds); + super.update(context, appWidgetManager, appWidgetIds); // 调用父类更新方法 } + /** + * 获取2x小部件的布局ID + * @return 2x小部件的布局资源ID + */ @Override protected int getLayoutId() { - return R.layout.widget_2x; + return R.layout.widget_2x; // 返回2x小部件的布局文件 } + /** + * 根据背景颜色ID获取对应的背景资源ID + * 专门为2x小部件提供背景资源 + * @param bgId 背景颜色ID + * @return 2x小部件的背景资源ID + */ @Override protected int getBgResourceId(int bgId) { - return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); + return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); // 获取2x小部件的背景资源 } + /** + * 获取小部件类型标识 + * @return 2x小部件类型常量 + */ @Override protected int getWidgetType() { - return Notes.TYPE_WIDGET_2X; + return Notes.TYPE_WIDGET_2X; // 返回2x小部件的类型标识 } -} +} \ No newline at end of file diff --git a/src/widget/NoteWidgetProvider_4x.java b/src/widget/NoteWidgetProvider_4x.java index c12a02e..3e79e74 100644 --- a/src/widget/NoteWidgetProvider_4x.java +++ b/src/widget/NoteWidgetProvider_4x.java @@ -1,17 +1,15 @@ /* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * 版权所有 (c) 2010-2011,The MiCode 开源社区 (www.micode.net) * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * 根据 Apache 许可证 2.0 版本("许可证")授权; + * 除非遵守许可证,否则不得使用此文件。 + * 您可以在以下网址获取许可证副本: * * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * 除非适用法律要求或书面同意,否则按"原样"分发软件, + * 没有任何明示或暗示的担保或条件。 + * 有关许可证下权限和限制的具体语言,请参阅许可证。 */ package net.micode.notes.widget; @@ -23,24 +21,52 @@ import net.micode.notes.R; import net.micode.notes.data.Notes; import net.micode.notes.tool.ResourceParser; - +/** + * 4x大小笔记小部件提供者 + * 继承自NoteWidgetProvider,专门处理4x大小的小部件 + * 实现抽象父类的具体方法,提供4x小部件的特定配置 + * 与NoteWidgetProvider_2x类类似,但针对4x尺寸的布局和资源 + */ public class NoteWidgetProvider_4x extends NoteWidgetProvider { + + /** + * 当小部件需要更新时调用 + * 调用父类的update方法更新小部件 + * @param context 上下文环境 + * @param appWidgetManager 小部件管理器 + * @param appWidgetIds 需要更新的小部件ID数组 + */ @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { - super.update(context, appWidgetManager, appWidgetIds); + super.update(context, appWidgetManager, appWidgetIds); // 调用父类更新方法 } + /** + * 获取4x小部件的布局ID + * 返回4x小部件特定的布局文件资源ID + * @return 4x小部件的布局资源ID + */ protected int getLayoutId() { - return R.layout.widget_4x; + return R.layout.widget_4x; // 返回4x小部件的布局文件 } + /** + * 根据背景颜色ID获取对应的背景资源ID + * 专门为4x小部件提供背景资源 + * @param bgId 背景颜色ID + * @return 4x小部件的背景资源ID + */ @Override protected int getBgResourceId(int bgId) { - return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); + return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); // 获取4x小部件的背景资源 } + /** + * 获取小部件类型标识 + * @return 4x小部件类型常量 + */ @Override protected int getWidgetType() { - return Notes.TYPE_WIDGET_4X; + return Notes.TYPE_WIDGET_4X; // 返回4x小部件的类型标识 } -} +} \ No newline at end of file -- 2.34.1 From fcdf48a812fc04e2a8b704307155df94476bd233 Mon Sep 17 00:00:00 2001 From: 15972095207 <2484216370@qq.com> Date: Wed, 24 Dec 2025 14:55:17 +0800 Subject: [PATCH 5/6] 1 --- ...便签泛读、标注和维护报告.docx | Bin 478079 -> 478126 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/小米便签泛读、标注和维护报告.docx b/doc/小米便签泛读、标注和维护报告.docx index 7b8c0b4490b0067098788097bfad3ad9ed5588f9..4b56d990c52181089e1fc0dbede0cb889c092b96 100644 GIT binary patch delta 24672 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

=&(UB*izEKYZvs74<&w zM^>i7yybErEQS<~A07Sn2+vV!gAjY^zg7ce4*`p$s*)$!7D5lC1qSs0^1Zk3gGsN< zxeA_)dwGKzqP;rNA3*k8R#> zx^K9By34!ZxH~~H(U8b>;fODsR??0Z3t!0Ejbw+5R>mn=RD zEUer;(!W`E!sOG21P_regT*JZyK$)k||NwrSHDxG1AWC z#l$Gak;uYT@4JTV1LCcX64wE{rv)nKw%#S~g!LgEWAh!HT%xZz80bF^j{v8dDrfKp zCh!4_*(5Cmo`L@#yYgYQvS1aE6Udvom-&xHEJ(INaA@`R@zg7}g;RrX%|g zMDBXEIC!cAQ;Ze$<>10%hF5(Rwxf9h50FfNkH4M302vXNod5s; delta 24681 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 TNECqy8mtU@ha4{pde#0fsHC&Q -- 2.34.1 From ccb81af6c48ee377327f07adce8b730f552d5e46 Mon Sep 17 00:00:00 2001 From: 15972095207 <2484216370@qq.com> Date: Wed, 24 Dec 2025 14:56:00 +0800 Subject: [PATCH 6/6] 1 --- ...便签泛读、标注和维护报告.docx | Bin 478126 -> 478889 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/小米便签泛读、标注和维护报告.docx b/doc/小米便签泛读、标注和维护报告.docx index 4b56d990c52181089e1fc0dbede0cb889c092b96..709de285f75b65e22dc933152d1ea192991f18e4 100644 GIT binary patch delta 27270 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 U!U(!j&|p;%J#v=}=(YNP0r|ln8UO$Q -- 2.34.1