From c978163cec7bb690f36f7b94102d86e1d54c755d Mon Sep 17 00:00:00 2001 From: ptka4xvyr <2190210566@qq.com> Date: Fri, 7 Apr 2023 14:15:14 +0800 Subject: [PATCH 1/7] jinhongwu --- doc/小米便签泛读报告.docx | Bin 197715 -> 198147 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/小米便签泛读报告.docx b/doc/小米便签泛读报告.docx index df760857ee4c03248dbd7e496e446622a460d10e..64ce7a35957cf088a3845696892ab3a33e97dec6 100644 GIT binary patch delta 11996 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 Z054Poeqt6rE?5W}fCifg0r)4`{{t);3~~Sf delta 11556 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 z

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 Date: Fri, 7 Apr 2023 14:15:14 +0800 Subject: [PATCH 2/7] jinhongwu --- doc/小米便签泛读报告.docx | Bin 197715 -> 198147 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/小米便签泛读报告.docx b/doc/小米便签泛读报告.docx index df760857ee4c03248dbd7e496e446622a460d10e..64ce7a35957cf088a3845696892ab3a33e97dec6 100644 GIT binary patch delta 11996 zcmYkCRZtzuwyuGR+r-^ng1bAxJvhPLH4tRt5Zov3?he7--QC>@!R@ZK&#AL-e^uk5 zyN0~<=&n)!d^mDY6mlFFv{XN2N<1GKXrC3Uqh>%v@;7bsJQd7en+23{giB4E6_WVF z4sM)Z_N%b7-NUQ-Xw}}{9F(y~oopMOu@Zkmrx*)(=*O+ob5n}dUm9g|*1|6M6@Ad! zFoR}WWv5T(1^n&-9#h(GVtLB>ArBdiz}_v4J@eRt8?PjHjhLZm3ds|t0iswr&|YVJ z4dt0AqMU8uHKco(frVxN-#yP)oR8&34wtdx&t^+PfUA{rV-WlZNZC2GgTok_y`dJ9 z_HPHY3;vFg{_*oq1Bl;IGk^OK@b`*%^{VjWU?5}VhL0~`N6aJqlrl4GJC7I5_$jRv z(IhIQ52T1OC*U8{kXHs4-soUsL84vZqo0E!t4kZo0zPNkqf$LVi0@m7d{PYOt$kVx zA<%lZaMV)alXv|NId9L)QyivVZ?Jrfr{#WrM%|i&FP4ee_lk+h73Jg2l??2F}W+7TC1$;5?7|>_`giw(OKx08bK)^$UDeZ~wGc*`$CN4pef|P?; zu|l>L-++bJGf?Xbu-f?+%FJx&1-Dh!*Ui$pGJ3-|%X)bI_|dUE#~at#>+5!2D&K11 zOwFrYvA#mXd z^Ht!OAfoP2KxIODE3dP)EZSrW46=wM9NJ#RaS|VaVsuhq9d-gDXZ#A6F5JPae`Z~T zKqHcXL2PW`jWKz+RZ!lJw%9LxXz7>deo?ZpzaYJ%8D? z*5*oT12LkOjzE(RsXF-cp#{Lr?6)TVN!Z#1Gip##WrrQmMAgV+%m=H8f7@dBafyBx zx)~`~oc)&5XA3S>pa~9Luml1|SMV2$-Q~ZH0w^cub7PAOyv(bEEmO z%zPS^)@*Xg8lao|d``wuD3YDsxwJw7$I)BRC51Q_eD-1!;`)ErY z)}oap0l(@|BkgSL(~A*@_xVBVH-U@b`aNpaWi{-|fUoW%%&BWv<&g?F*tP>|2l;$4 z2;$j`8S(12C1bTb&Z^-Gqq^0ERTyLUx@H}pgq#bHPnVqPX_tuKxvPfj_V@ogSHStTF^Bl61=4K_z8%u&2+fAA79 z1HbvECHtbqs`NkLXja%8uBcQ+F5P9(-tpUXT#B-yH%kJx*#u7Xz6qluR-cQ)^f})IKMq#) z;^!uf+_Qt0#bkBWpYB!$QY3eZ)lm8rvBu75$&~1XXCt{Bbr^Hd-w~ynWfG&TIf6`A zhQ+XR?tb}{2KIdgIH zM+%k8`T>Am0^zU*$|S)?udA4g=@(+szG{UwoCII9a$yz_DOim>FN^ackLu~R>h00J ztMlc{;G{w3r)!%y&*__6hTq24#^mi~$z#d$`D4kt^4)%>KCy$69{cB;Smm~I34iAf z{>#t~aBHq&sqXt5ilRlSVDKBfI>wK1tE;piyV$ud_8ey@U|vrt=Bi%;9$(T-QY!CC zQ`z=oX^9`G_PDKjmf&F%;Y{F)BMU*cmW|t_otI5olt?^q1dA}OH9LcVZ^6TNc%Y6A z!K8pxps$M$&f~xn)3n;&X4=OTTIp;cKy_G32~9=ajzl{6LGim)EGw#j*&-h0>DsgS0xCc|E&v^RlV8%Z!Vze--4no6=NjGxSQk z3fcF;#(6bHnTv`VNO(-j8IcFlw*89CT1fA{fzvwQ+yS$H zNR+Ger-9lPTsP1XyUo7ZTZ!3Ubx8z4*56-y*gJLNu5fj8^#V1zdFL+zEOM+_Lw>kS zr5&MiJ}TV768O;a1rxS*SLi3{;i-id71x+&j{^)l@x#^6VanviJB_j7O7C+Kuxa~K zAb6XDXLS#}Xj~C;H2n%Lr){j&D`sQln5ZMx`sfGpPbdjCLxfA2P?K-9X9(_vHEZt!!dF%9W0!-^ zt0cQVD2A2a-{BJ38AF7p zNQ11-fK3JZ#yGk^>RKQF7W)hIQL=pO3d3YbKSs>~shAYC;ln4Aoyj%n;$YM>GCd|W z%B!vMr_I7@{;0P@lW3;6B)LP7wdOP=K!G94E z7FX4&)F>ya&C7(S>fE&E7+mgsy%~dgM0x6Q?&Sigb~B1QyYi$c^JE6HMB+&%=7-E% zUCvBK7sXEJ+b9nV%nBi#n@)(Z6}71*J&!P@gYC_)1`qI&uJ3@pYSVQFOG$&`wW~1S z7+y!2{2eP+G;BsX5}9;>h=v9qv6ByB!I>kQT+kNIg-2w9nhQV9wS+;TT!}9FHz!z+ z!rL)WUU64Tp?&CW%XzXnTG=K1h^j$FQr1;c@@11prQ4D<5_Nk}c2Q`C@Z?Ep0L`k1 z5M#1=iGaCjy-BL>t>S1>rpNK|F>neT9rT=_LdAS44@B)L8j={5WXloYR-bdTmJ4yr zP`1RpJI#YelyQM_TTasC4Fio|fh zmkFP%AVE%U+Oqvo!4nys;glm+eo(TXBx4%v2AO=Q*NDmvW6PCrRrSZjb-Kx;k|M!H zjq{d+H7Dase|p_3OqI#JIO1+?W}@7)j-oOaR=*%eHgs0ZS4ZBj!(#I#4MFtIyBeVV zl02;Oav!yz-QY<5g2_?G(Xok2zU&F)qOh{;nUbpMdl~guk^5Kd=etXSma-h2_+?m9bT#1h-Lxa{+Tky57!HxE_QUL z+k(JOK1ieSQAj#(HDx-{ja~(I)r5$i)TK`FJ!1~djiea&pP7-Pf^8ea%?S{-^l+#@ z$!D3LKOS#7zG9IS@DJ@#%$^p*GbMjxfF0f8%8y8nVPkldfKHUWhJcRFrQ@~Vg^E*h zMflHgs-eK4-O!qzI_vw7%dW+H`cgIw>`oo7=1>3n1RlmVWIKqjd{2gMNHIjjSXo3{ zOLDHX*m%-goN*@Wl!%j*vQnT53=c5S=njG^Q@yQva(YY+GB_hPvLzYv?ez3CsXQr` zt~>&IXg@eRF;boG^r27oPFH+0ln z%G#RHY!R3@gbsw^V&;rz9l^{{N9^NWi(@ECg&-UmnjrGPB)!z7$S0~5Bw@v&t#vu3 z9>R-~aR|Pz=2fXZ05WE`XmqV~z*;^;FGQr?jX5<6T!{O3CNHI)XwOjh)F1K0;;}lE z;#;aR8{NAry~u(Nq96n!z`Qh6SMOh=Ih34SI5(rlc-3P6HmEQiRD8buH!2f)LLWcW zS9^(OQGJyq#SDc2-G)UcSh`ztrnLf`HrYf2h=d3JW><}3q(zx1m$QU9@(Ml!}1Q{aCQtU(4bk&hNliCnj2)NxUbI} zEkk;89Vzvoc%kS!N$>%cE#~^m7HlsJMTdVAN%~koLLcMV(X#r$JSt1bz~;+(g3h=? zfj5ekLa#AE&LXN8J&j;fZm@d9T$H}(x$1OY9SSTeXdtdJvn+MRwy-!wf`^tZj2oCM zEf%00pPE%+x&haY`eU+0ov(2RCQZ(0WWD6KR%mpOFCcJfUdYupnZ7L?gvG)^;H~U=s%gDvGKftCO zKe(x?8h!YkZM)oS!oMF@*)3)V*iM+ut+k$c+k9X+q@yUcr04+zFJWgnMmcI`t(~Yq z5R+XDruvT3+!Tt~fCaZ|5L=M0B9mVwn{C_F5aI6k{DfrY2>84Z{umY3xVTBY=n#B$WU zu`ez36EMbnKd(t{nh%f06!^JPqs2*cKxA$MA>I)tc>A{JiJgcGV`XSw4cGBW2Xl@S+~fpu-e%3M#I-JlOdn-YxB)s5RoE5um8%!v3ZU0w1RI5oA}b)3>tA4 zX5xY8Bd8|RGP@IO8?*-jJve^~a-~{{`AorEcSFy%dU%b#Trjd%w;$1jyh4&pAv+sC z&{`?8?x$Z2UU@Q?xut7Qo2Ip6nc!tg<)s409;!-OmaSJTKS;GVnrO8kN7^R~3^;KM z+=TdX9$E|5X8{HmFI}}Gf4qS#@5EB8%N6rAAmmYs36 zVmvhlw=T8EubgV-8SRumJkYmTGaChBUL7h9-3otoZBpMqtmM<4F=p#lgM3}*b)V}$ z!0W0DE{0KJNih#*5No!{bOzT*1j88yC%A`~MT?{58}c z<%xn4hcE(hbbKM4@2Fb{}>Tk>)t7sWjI^3(Rd1+V68Zdvc~ zYVbs%^16Dndt>igwej5-;=qveIO6nuM%J-f6Ud<95rvCw8rRA3BM=3sLxUdCR4Gf{ z9vuxGyVV03x0j=?cKbrmpRYg85oNi=jIIx|S&;yvYqx|G<(w|lkU>vSgm;2@H&z{6 zU!44#!X)Oohp$;&?n(_%w`OmeIANV1o~yK7Z2e)-w|g;XtDOVtG|o zEl1|JV$RDiDY|_2a%~8J7)G-d#;2cuAGg(}i{aEM(-veRnD}lIM$0_VI2B5VFL5cN zxk&}>%zwT(01WxSJ)bABH1Svl~5|F6q|H1V9rE@=p0|Tbw1V#{zI5 zUfA3AVQsi{^CkiQJNOe4k*^m?7UE2?t;!8VEv>+QIhG=_?xxP+?dV5d zRxae&j5qZ&XOJclU~PY&v+7F^KT8H>t;x_jMyX5dgfxSh%Aj`7qFaRd$206^-j9(x zZYc?Zop%rZeh|OiPYo@^m45sufiiMGQI3LD;}7iY25W6NJSTn*Xm`dH9`CCuRA7Dk z^XtWOY9?Vs^k8+>DT>Kj0HFD?q5 z0OVwJbr6;@?j5XN;t43qxC~sPBFbmR@n*Nr-0PhNh2VXS>W+xt89n+%1My?GNBQQu zssD8{chmF+xHY?8FT5`aYwXVXv%{*Ied&Pxuo;G2=+>_}t!QpI6pdiyXjZ(A*;+YoQq+NJJJ7>L|<>)I) zJ&?}0;i5zL#@mg@`{+-1dlZU@CV^O69?i-oz1@ybLGd9K6_tdjydHQm_KBo3ZHu=O zOcBfxle3P}nySR1)KzxIVw;J5y4~hgQxOcIsJ*Y3f+y@n8g(TVf#P3;L|N)k$Ilfkgqx5FiA_NCz^y2-|IFF8&t78Hg2qFT2jx{t5?- zm*b1HQf>8w;19ML5p8Rj$zZf#9ysrpC24Z_X)nM|sU3c>Y1JM5s6W$}h5Aa&+%T_; zgV|wS0$U-yy6TV7HlJx-!v@V9U6JpVEWYAOLKiru0x4M*1n8BRl?CZE(?pMYeIO=3 zh;i+2H%s&kLbZzG6m{*pX%g0d`9>}%MYZ5(HtDgd^}{_$e%d>iz5F40oT(rL+K>t( zw&1hX%f)*|OweZe*a_s$>e$#1>qPi%clf4@17`wEc>#ZF_(H4(>e?%r;7_O85eqn_WYCrr7VTHJTLkD|)&=W@# z9boddP7*c32)r3n{shY@@qrwmq~|*X1SV~3+V_&XT5Ugc`+hc_Q91suv2)m1_i^g< zIET&c9G;T=wyjTKicMyU4j#jxITd%YCS9Nb}j0@r9lk0`1N5dozTs=S&P z7q0Q}G%r?D&m}n|URzfS2Y{RqMG5*OW|+jVD#O4C`6f|Fbcn|{_5cbFcieTh2w!9^ zOdeL+1KO-yXpvi0eSF^;o zwklm_4=FULX^u0lH5crBFOv|Qu=ZENlyVpkt%nwyc(BPuShYt!N}E4rII63?L@hBg zG<)G`2Ms+Va^3kk8h{~o5;?z-=vslH*U$bpE#i=_ z)W}Wdw+)ck;;%_yKa)75_|#9pQlhYk89V|GLJQV;DVjTo88KC5zKIzVXm9pqRFfCK z^CvbHJ}KaTP;34^qZ#;9FpBWCeOCR;mXw-H-zdT~BZxK4XGjaX(R?MzqU#Yi*mU8w zv2vRJnHLi!$sQ*zP0WGg_oOe|VP_WpF7S^>YFVAPmvRLCy~SA*JPhn29!E`l$NOaz z(&0$JFL^$fcC8akBIM=<6J%rfMpQK7yN*{hA{@aht+KZyfoc(!nEc&+Cq$&iE&KhKuG?!1oGw-L@GR@L8x-w9liKSE z5$L`6^Sr?V(H|$wp`Wu&Lngh+e@GRixJJInSb$8JLkr^sLN;D04wR5O^sL=oI!14| z+=B<-so)J=zw}4ka77wxIm%?sjnG9;$YjPDMC$Xq5zmBJ8KzRsZPc#&=k{<{9omd- zA;GgeE(MvV?UX1I2d+amKsPj+5zx3HAz`q*7mm%-;1Q9V57Fth^A#?OccV{?2@8bO zH-Ubz>96ah3Q-g4N==W`Qg5#Orq;SqjPJiT7#qr`H%k{UrawS^?6F3dbw9Sv_!BtF zy-Y7&1XC-ajW*)j-=&&^O+EBimnzm*APs^k6rJg-gT&PsSps#PqvUQJ!|9+zd1Z#S zyN?pv^dMSv&&E{@Kr?`oRzMt8rRuQDSrvQnLO#u+}HDMtwoIzmIA`LSNq?R`GM0WYknHlgnFUGvCeDu))@V{*XQ zNy73qa%lKhi8}W!k(`>NzS>H0Pl!qyq9S zg|c2+6S`DZassZPRTh&R7;r$-{5?c3&SFTso}~-!N=j7ZTWznqgFB4+m4>qBhNN&~ zC7+=B?a^To^T2FeJLRe{0q!F2#ufJ=jPi;4Kio^5_5(@|-mVCbmyx<184}7T(cm%R ze_#xS)JC&&oKs=D;{dX!XHh`}jX|*GL=mFiIN9j%*Q97mO)g>?ES*eX2I#JTu`AD> z91OcK5UVKjV7&|J0c)z~4K!8tb>L#w##q^iEk*A~7?Uu_m?s9#aKderA<2KR9E!f? zR}d?8p+jRrU+cjS$*qJTAu@@dS;P~j!xZZn{m0~Fi8u7rf&>xVO&7AlAM$~AfE#=| z3{glcL{W8!bf}qi-5$9umMVw`$FE9^{;FjPiUb=wXbtN=@`I+u`U7VR|5M<iY+@FzjptUvu1%Z!LP>fQ&6 z$~a;ivHgIct0eG|NEXA6mjz8YkqXBr2{dGG)~wyDkt>+{-Pv)nk#YUQEwz4;@DtWU zHa&j7uv8kc;)gYz^+P&xOuh&mX7&$KRW$pceIXhQT6cS;0QZT5yToZ_VUg#zgF8^- zG?0e*`K|6@dkqJ=J4c5Mi{}3$rXA_%L4{YI?#mBgh}RPqSBJo6iO-r~$(RS!A{p=# z%pld(8J<5?_Q0ij3SCXixN0_GSO+rPmeOw zGLzk82qy~%c;OMfZf(NusNW-439NSoR#4jv&X7?hFWVQ_K+)Lewg~BMWeBrqUMZGU2 zI;K<=Sp{ccR?N;!FLX}%waDCkd;pgZtEwu00b0Z2$YDZ46k3+2+eGR8>eF`h;??J1 z+sozAFw5E+Epcl6fnw8b@!7ed4mfAYQKYh~16EoR>u!cnR|cuOX>`_{4Wc{a+}&lf zON!APRC~$e(d7KYD=Jjpy4%IOcwFXlr)K@u^{J?;@@i#9s+bb(yNu8PW~zXOcO(22 z+BJu3upiuT@_9Pm+f<->^^A7Awk|9-mD|{_qQPV=&|o=in4TGqhI&p{cCv3X&7k1Pv*_N1;fMYA;Ft3Tv|OhYGOKtEcT zH#Rq(+|H+@FJG|3Faxq|mp=xs4=R~jQ+K29Uk&-@xm*+Pt&(}_-LDhZ-Wi(&z`NNm zV?i%-w5k@Y570azlUz@VVO{&kE%=a5bAcRBStL`QZ?YVEH|v$-v9{aH0r{>PbfxSw zBBdAx1PZL%bBa8`0QLE( z*Wp0ta|5hw1yknR<)4ad@x4Cw)|lj`i}gEk++OQMT5tpY4f3*F_-v)=Qf#;XF)V9z zi*pyl=4@^iGXrxc31; z#mRneJy`-?5gW$qc=RMry6Bt7cu z({Z@lKmTXGXYUIF-HjRk$evH%TyRLgvp-p%)M{X}RzuVSegLD~(Mrx<6m8M%mMSv3 zePYD@-p7`X8R;|?kes+c0WY?vZRy%| zs|3A^6ID8f2Q^)<_I_ox(-Q$f7QmZ^>iV4WPn-vRcwqUs-|OX#)N}?X3jc_ZUtHQ8 z+{9zZc{r)(Su<6w*fiWX?din|h7E-j#qW!3>K1frZ``3;`t+FuwcQrJm;m0s;vsu3 zG3l{3>K~b;zFsngZPAGmWi3eq&B;S)`0^RHeIUu>N(7k=d_5ZCTkotEb=xQBfAC}5 zOdlY}61`xe4JTGv*aRj>uZ`p>)AJ5-3LZfp@sJAs^@-qF3*invzuIxqDQ2X%Crhgv zhKwM{h3FwAVF(3)lyR!V3;V6xOM6vlO2v6MoT3K%B*qwf?s+(gTjVTiOfwo923D0K z^;A%fiOY6<^!ZD^Ic9qkBBT8br%LUfvV`nKY0mmf}JPo_GZP=vuw4Azz|S)dJpkP^}&RsZ6&r~+ARJ2 z!%Kqy3m6XsX?WmcO$q}78tuWVt8ojJYpZ~XUziu=uxdb=x5;6u0m z9b5(2nBwHnI@U6VhAA?<5so6Rpg)~GUT@I*oF;;m8qH>Y%>mTE2=5~da^>Mkd(6{{&r;M8dxgvNhBWSIlWFw@Qp-}2uAoHt}64< zs0yR1v}jCi_5Au+|4scL0xQcM<>QL`3-n)kudRar6Yk%T|8VS}9ECxH_J6=D;87}& zDUgBwHUEH?x?|8lQ(l~kNgs&#e?%;)>`I|!Zp1VaczV*RdA(A-X5|L{FZo;=GbUD* zM|isMW?wa1{t8g31t2q&?&e zdNFls2SA?h?_ymdHf3rDCi$hVt&zOzDPJ$f5SC;3GFTg2-e+p>Ag-2RZP|Cy=)H77 z^X4nCLWzA`U*{U>`oE9UY)e=ZO#QJmj|`Q5&JPX~}WeLSBnbv$COkz}Y08ThRR& zYx}JAd)!+BGwN-Fuxp{#%bI|az;8s9~Rmq6o6x2P+|l_TG$n^ zSZDrOM^*%757wn$H>{>bgb1~yv5&8r0!_CP>o9@u_VZr_G8hQ}AOLd!02o2);$iCI zkS*%sP;DJheIH=pCzJ@(-YZz;6N()Q_6;2T38nELr8s!w6N(@DU&V4V0bmsB%X{)6 zfCuW^JD3C#z)bjGDH0R}`ak;Se-|VK**~@kYzYYvhN64{mp}pp0je)h;I1bqQZNh@ zfB}k62FwQa&*`o_*cs}daEJ=vawvc})b%|03JM?wH7@~X0|2Q0tKkKI2LPfWjlmZH Z054Poeqt6rE?5W}fCifg0r)4`{{t);3~~Sf delta 11556 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 z

Ir+Kl@3dLwltnoy8}{Jf2GtT0W&1MI)W-=?1R+~Vr4yVq^&P7axBeL?*GGG=Ymfd?n5=xNTs`ix^8-)rEw?W^L>zA9e3!e_D48B>CGGI=9 zVuvC&N}=$^vxUmD(-*kJaoc56-;$0QqkO4aUzfMfmu{J7%RbIoXxkt>#koEnb>;0z zlUUZhF*KENZU1vM%^DnQr<;HA(aI%W+VszbDx-KmBEi{eJE=!@vulBVD$B|sBRmuiknXN3HV`Fx9&6y8Q5$I38sYjTD5A$MM=SZ02qis;9QKc2PS@9cCqf(|&K)L-a3S-Z z+QyGK4c%kYq)a21g@kR{`dB=-jduj9;_FPH6DGok5g^?H%|}eNGSNw2 z1E+Z=mj+5A)L19xZ@#uoM$=F2Q!7kr9bx*kuISN7L>Bk}_yBh<5ax@UV-Nw9k%+;6 zDM53cfB=Q$i4NrR&HW9@vc=~r<;&mCSKtfD?Wh$b>a%Ykr&a6BjBro9)ulXgU*_%c zd-|FuRW2Y&3doUGPL;8id-BTq^OkSQlgj;vN%G(hCzL1u{8R)laXxArGmyc*Xz~?!#O&1)ubBU425(V?R?=~)vCb=k z%2)xZi{^uDF)0UheyYqC^qj)1|4FEr#(6xTLFV~AYDGE^s;{vu7%`@6Wdr)NaC6yU zU!X{2T)Vbd3`E*L;H9KbDq-MI8A+d*)_1>jN%I>oQyT4PV8Qj4O<^5z6Dwb|Cn~YB`}-sA4{0{Exsw{oh29<^Y8v`s|rKP`PSw=kvUA z$%)$=fvJ+mrddF~Y^p-9%WD_5Zn|u&2IbIH$ZxV1AK$Ex@nNoL(KN5oF&owL z?O@-HVkE*4hjZnt5s{v$Kq3(NHAQe8T@7Qh|1J)GJx$C2DkSQd=5G`)W5o&Uk1Cs$ zAA}^{n9;kVMzlDyOK85hGDzG|%dfOOGkUagz&kYs&@4 z0z;=a!y9(@jF1y zlrH8!k}zlZxgHq2Ci~VPCuBD^$*|M6#mM*MucBJZZ>4ZSDgGs4Xs$TFXw@d8%Z~Q4 zo^jW|Vfm6Jp4;dc5uwtAIycwH@8&suLHaoP zb_5G5q^NWEsf=mQam9Za<+yGo;U9ftpHV1`9dz0U*rrc?=hrAFd1@?|Oy{L59SNK> zt=IX7*=%~M?fkAYeLs}X=gNIg)x)Qbxynv|S-$o~goQw-V&p^mUFlE+L4FC%Ub^FU#z;N8MC{uXg!vo_m~cv zoaxrEfho-8gIggG7evFpAXwj9h&6|BHFH)Dcw_$Hk!71f`?D(}=4MD~TwaQ6nk>Nr zT)@Sg$zPSd^ig~&4}Hm5j_KSculJ*cssF)YkflGj?#35pS90 zbKB|liu*dxMM%RM(xd@p6{Z#=`lhc`MjjGeLm$ULD*Mi zt$8f=C-5FUdPdM8Fp`YNFE9cD;;llV1u*+;w1%^G?*WE-bOl8m4DAF=$5yd&h-x8)iJ#+Rd8phmX5sFSS+OB=x_X>5ARH7V9C=dsd;qm^_#Wp{q*pjfv zpKsRn)qq6vcFQU*u|`iDOvJQ$e%`py-#nQ+OO`&LE?y0jl%w9E zT>mPPN2m?epyd+lYglfdGdOK{oqH67$rg9e2~`ejZW!SC^q!UKb;YwtSW|2N&o*^E zvEQL}jBFE%crF4HJ*GRdog@(Zp_#qqrCYCCelJ)k+eT0Bd)JKIE3>{DBvLRA-}|&n?$|$tRkqoIM>~j@LEoGgj4q1>rJ^CvwEXRaQE0 zxmcEjvz9b#)))*M^w*xARk3auaJdA#VvUCyAv7^ddo+M<7wiCcLnYF5TJq7VoS=M= zW8oYEyJ;U{B=;)tZlf@=rpY|icap*F@$rf8i2`Z;P%(Fawm&T&r^gLC0W1V`Ao#tn za*4zn_(9WvFR)U}r!pD3@XGxkj_bMBB$8cqf0ei7-m-2RB8Y$oAo7rQhEAB>JDC`{ ze>C;zH3NcvjUP_PZ<2UO9!m_mERA}HyeyCFx+w3;{@lD(q9sY=D;%mA=uUf7!9v8h zt#>aA758Vkurp^zTplP&dif9X(^sQLERo8;AT2R?kTNH~Q-nblZxbwBr4gq6ZgpOM zq;r7xl+=?X?00tekdXh$;OR)3{wX$S^uVl%@*1$&?oAzMAphf_qjrT)GFDsqJueV- z!y$MIouh0HV)^kD=AvbCO9Y#KuL@(As(A~h_9U;8rq;~=jr~N~N}72Oih*QA+f12> z5`TT5D(G9cO6?ybQM&CNqPOfN)*d1)dwxc|C3num>8P7n#2l0kZ*IQbNdS^DYgtQf zWe0#-)H^6DDz{(Pyhms)N<4fr9cB5 zrc#h=Va^fCa4?dQ2*VkLoFR@`BO1skkhy!_lwG8S)KRjzy>N@yE3Lq;gX-iEujj*x znoF?AaTtNv;XT->AF3ZJYh(pRGL0pGC4h&ZtG38BS^rv)y70p`(KCtV69AV z4W~wmlj`5-uCOC95^$LR0>EK*YKzMk=&$DlNjXm*e|4oWv5~DSRQ^xUzkyKN>ao&s z<->(~c8BgBIa3PLd;}E#eWm}$Znv$g?ghjDA0SNX|K|R$g`$31uKeMmVM8yjB>exG zBcOkS3rt)G;x)jr7kOvyfe8O2Vo6CjGQTd|#3K-tG*&P)+la?oG!Mn-lqZg|UO)iD zmcMu@&|7DLqA$UT2s)ZDJ)w8PY?GG1z4bbGbc2_firTYPqrk}1G}*x zBQNkj^ncsxI@O%{5`ds%`A@tO@ZTjl7Pvx0EE!;`q5Y4>e;iW&b@(rHF!Yv9oWeuX z!3e}o!&8G9m%;p#kCKby;!M;L?fxC%4NyjP3^aOtyLSCq!>{>9kB}Qx$n_=L>G+-+ zT>E3DyaNxuN#>0BZdN!wYT`k%|7#;_06W1AHVqv%k)BJQ-sXB|5Wa3}E;Bqe7T%pg zT)P+TL?xb5WVz*A9-WR~Y`M$}%F4KPT}JTOipqR1WnUjQ*QT5^4K{wiT};Gb&-(3p zJzRvKKSuLALEN;^9WhS#6t}6aWFxTXdyx;}^h^z0A3xO^mdq1ju?O>g?t(gM0JMkW zY`N&4cyf#dpO-Z5C(`isdw7{;q4&?O<2kCUG8bKkk1;WA3)9=`hx`zB0=mZIy@zr_ zS0~{FK>gq;#|Nh4=Yi0`8#BgaA#x>7xlVXg1zHW_cEK!j`J*GMJ*;rTjUk<|8g~IA z6pOol3`}{;I=!SXHYa}}|5dW4c0hp%Qum<17(rmMFt8Y83s?-)-U-5ZPwoK=g4kYC zAi-=Pjh9poNU+*}^v0=CkYHY@e|4{^8CDt=9!27#G~{!iZmfE;f%A}G( z{gYEiCRGOtECLdoPtAb>3xg;`Qg@)hl>a9PO+|qQM?-3*W Date: Fri, 7 Apr 2023 14:31:29 +0800 Subject: [PATCH 3/7] jin --- doc/小米便签泛读报告.docx | Bin 198147 -> 198181 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/小米便签泛读报告.docx b/doc/小米便签泛读报告.docx index 64ce7a35957cf088a3845696892ab3a33e97dec6..bbbf246b90a97f801a4e7d6b1d86d0dd1fa14de3 100644 GIT binary patch delta 12088 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 delta 12081 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 Date: Fri, 7 Apr 2023 15:02:56 +0800 Subject: [PATCH 4/7] 1 --- 1.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 1.txt diff --git a/1.txt b/1.txt new file mode 100644 index 0000000..e69de29 -- 2.34.1 From b44ea3d5b9e2dced1c0e71d73a3cc61afb958c91 Mon Sep 17 00:00:00 2001 From: ptka4xvyr <2190210566@qq.com> Date: Fri, 7 Apr 2023 15:06:49 +0800 Subject: [PATCH 5/7] 1 --- doc/小米便签泛读报告.docx | Bin 198181 -> 198108 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/小米便签泛读报告.docx b/doc/小米便签泛读报告.docx index bbbf246b90a97f801a4e7d6b1d86d0dd1fa14de3..33b3ff85606d93b3606089e4ea6c540916e77c7d 100644 GIT binary patch delta 11494 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 -- 2.34.1 From 3c358fd3a2525fe347bd51d82d96e63d7562b24b Mon Sep 17 00:00:00 2001 From: ptka4xvyr <2190210566@qq.com> Date: Wed, 12 Apr 2023 15:36:54 +0800 Subject: [PATCH 6/7] 12 --- 1.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 1.txt diff --git a/1.txt b/1.txt deleted file mode 100644 index e69de29..0000000 -- 2.34.1 From 3b75a4077cc7365ecfd277772f8a0a55c13f4e47 Mon Sep 17 00:00:00 2001 From: ptka4xvyr <2190210566@qq.com> Date: Wed, 12 Apr 2023 20:59:28 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/net/micode/notes/data/Contact.java | 40 ++- .../java/net/micode/notes/data/Notes.java | 110 ++++--- .../notes/data/NotesDatabaseHelper.java | 273 +++++++++--------- .../net/micode/notes/data/NotesProvider.java | 79 +++-- 4 files changed, 262 insertions(+), 240 deletions(-) diff --git a/src/main/java/net/micode/notes/data/Contact.java b/src/main/java/net/micode/notes/data/Contact.java index d97ac5d..199bb2a 100644 --- a/src/main/java/net/micode/notes/data/Contact.java +++ b/src/main/java/net/micode/notes/data/Contact.java @@ -1,22 +1,7 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (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 - * - * 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.data; import android.content.Context; + import android.database.Cursor; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Data; @@ -24,29 +9,35 @@ import android.telephony.PhoneNumberUtils; import android.util.Log; import java.util.HashMap; - -public class Contact { +//change +public class Contact { //联系人 private static HashMap sContactCache; private static final String TAG = "Contact"; - private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER - + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" - + " AND " + Data.RAW_CONTACT_ID + " IN " + // 定义字符串CALLER_ID_SELECTION + private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + + + Phone.NUMBER + + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" + + " AND " + Data.RAW_CONTACT_ID + " IN " + "(SELECT raw_contact_id " + " FROM phone_lookup" + " WHERE min_match = '+')"; + // 获取联系人 public static String getContact(Context context, String phoneNumber) { if(sContactCache == null) { sContactCache = new HashMap(); } + // 查找HashMap中是否已有phoneNumber信息 if(sContactCache.containsKey(phoneNumber)) { return sContactCache.get(phoneNumber); } String selection = CALLER_ID_SELECTION.replace("+", PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); + // 查找数据库中phoneNumber的信息 Cursor cursor = context.getContentResolver().query( Data.CONTENT_URI, new String [] { Phone.DISPLAY_NAME }, @@ -54,20 +45,25 @@ public class Contact { new String[] { phoneNumber }, null); + // 判定查询结果 + // moveToFirst()返回第一条 if (cursor != null && cursor.moveToFirst()) { try { + // 找到相关信息 String name = cursor.getString(0); sContactCache.put(phoneNumber, name); return name; + // 异常 } catch (IndexOutOfBoundsException e) { Log.e(TAG, " Cursor get string error " + e.toString()); return null; } finally { cursor.close(); } + // 未找到相关信息 } else { Log.d(TAG, "No contact matched with number:" + phoneNumber); return null; } } -} +} \ No newline at end of file diff --git a/src/main/java/net/micode/notes/data/Notes.java b/src/main/java/net/micode/notes/data/Notes.java index f240604..7cf0140 100644 --- a/src/main/java/net/micode/notes/data/Notes.java +++ b/src/main/java/net/micode/notes/data/Notes.java @@ -1,25 +1,13 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (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 - * - * 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.data; +import android.content.ContentUris; import android.net.Uri; +// Notes 类中定义了很多常量,这些常量大多是int型和string型 public class Notes { public static final String AUTHORITY = "micode_notes"; public static final String TAG = "Notes"; + + //以下三个常量对NoteColumns.TYPE的值进行设置时会用到 public static final int TYPE_NOTE = 0; public static final int TYPE_FOLDER = 1; public static final int TYPE_SYSTEM = 2; @@ -35,12 +23,24 @@ public class Notes { public static final int ID_CALL_RECORD_FOLDER = -2; public static final int ID_TRASH_FOLER = -3; - public static final String INTENT_EXTRA_ALERT_DATE = "net.micode.notes.alert_date"; - public static final String INTENT_EXTRA_BACKGROUND_ID = "net.micode.notes.background_color_id"; - public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id"; - public static final String INTENT_EXTRA_WIDGET_TYPE = "net.micode.notes.widget_type"; - public static final String INTENT_EXTRA_FOLDER_ID = "net.micode.notes.folder_id"; - public static final String INTENT_EXTRA_CALL_DATE = "net.micode.notes.call_date"; + public static final String INTENT_EXTRA_ALERT_DATE = + + "net.micode.notes.alert_date"; + public static final String INTENT_EXTRA_BACKGROUND_ID = + + "net.micode.notes.background_color_id"; + public static final String INTENT_EXTRA_WIDGET_ID = + + "net.micode.notes.widget_id"; + public static final String INTENT_EXTRA_WIDGET_TYPE = + + "net.micode.notes.widget_type"; + public static final String INTENT_EXTRA_FOLDER_ID = + + "net.micode.notes.folder_id"; + public static final String INTENT_EXTRA_CALL_DATE = + + "net.micode.notes.call_date"; public static final int TYPE_WIDGET_INVALIDE = -1; public static final int TYPE_WIDGET_2X = 0; @@ -54,13 +54,20 @@ public class Notes { /** * Uri to query all notes and folders */ - public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + + + AUTHORITY + "/note");//定义查询便签和文件夹的指针。 + +// public static final Uri my_URI = ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI , 10); /** * Uri to query data */ - public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); + public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + + + AUTHORITY + "/data");//定义查找数据的指针。 + // 定义NoteColumns的常量,用于后面创建数据库的表头 public interface NoteColumns { /** * The unique ID for a row @@ -72,7 +79,7 @@ public class Notes { * The parent's id for note or folder *

Type: INTEGER (long)

*/ - public static final String PARENT_ID = "parent_id"; + public static final String PARENT_ID = "parent_id";//为什么会有parent_id /** * Created data for note or folder @@ -140,7 +147,7 @@ public class Notes { * The last sync id *

Type: INTEGER (long)

*/ - public static final String SYNC_ID = "sync_id"; + public static final String SYNC_ID = "sync_id";//同步 /** * Sign to indicate local modified or not @@ -165,8 +172,9 @@ public class Notes { *

Type : INTEGER (long)

*/ public static final String VERSION = "version"; - } + }//这些常量主要是定义便签的属性的。 + // 定义DataColumns的常量,用于后面创建数据库的表头 public interface DataColumns { /** * The unique ID for a row @@ -206,41 +214,45 @@ public class Notes { /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for * integer data type *

Type: INTEGER

*/ public static final String DATA1 = "data1"; /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for * integer data type *

Type: INTEGER

*/ public static final String DATA2 = "data2"; /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for * TEXT data type *

Type: TEXT

*/ public static final String DATA3 = "data3"; /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for * TEXT data type *

Type: TEXT

*/ public static final String DATA4 = "data4"; /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for * TEXT data type *

Type: TEXT

*/ public static final String DATA5 = "data5"; - } - + }//主要是定义存储便签内容数据的 public static final class TextNote implements DataColumns { /** * Mode to indicate the text in check list mode or not @@ -250,12 +262,18 @@ public class Notes { public static final int MODE_CHECK_LIST = 1; - public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note"; + public static final String CONTENT_TYPE = - public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note"; + "vnd.android.cursor.dir/text_note"; - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note"); - } + public static final String CONTENT_ITEM_TYPE = + + "vnd.android.cursor.item/text_note"; + + public static final Uri CONTENT_URI = Uri.parse("content://" + + + AUTHORITY + "/text_note"); + }//文本内容的数据结构 public static final class CallNote implements DataColumns { /** @@ -270,10 +288,16 @@ public class Notes { */ public static final String PHONE_NUMBER = DATA3; - public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note"; + public static final String CONTENT_TYPE = - public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note"; + "vnd.android.cursor.dir/call_note"; - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note"); - } -} + public static final String CONTENT_ITEM_TYPE = + + "vnd.android.cursor.item/call_note"; + + public static final Uri CONTENT_URI = Uri.parse("content://" + + + AUTHORITY + "/call_note"); + }//电话内容的数据结构 +} \ No newline at end of file diff --git a/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java b/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java index ffe5d57..aa5a860 100644 --- a/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java +++ b/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java @@ -1,38 +1,22 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (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 - * - * 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.data; -import android.content.ContentValues; -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; +import android.content.ContentValues;//就是用于保存一些数据(string boolean byte double float int long short ...)信息,这些信息可以被数据库操作时使用。 +import android.content.Context;//加载和访问资源。(android中主要是这两个功能,但是这里具体不清楚) +import android.database.sqlite.SQLiteDatabase;//主要提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query()。配合content.values +import android.database.sqlite.SQLiteOpenHelper;//用来管理数据的创建和版本更新 import android.util.Log; import net.micode.notes.data.Notes.DataColumns; import net.micode.notes.data.Notes.DataConstants; import net.micode.notes.data.Notes.NoteColumns; - +//数据库操作,用SQLOpenhelper,对一些note和文件进行数据库的操作,比如删除文件后,将文件里的note也相应删除 public class NotesDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "note.db"; private static final int DB_VERSION = 4; - public interface TABLE { + public interface TABLE { //接口,分成note和data,在后面的程序里分别使用过 public static final String NOTE = "note"; public static final String DATA = "data"; @@ -43,179 +27,179 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { private static NotesDatabaseHelper mInstance; private static final String CREATE_NOTE_TABLE_SQL = - "CREATE TABLE " + TABLE.NOTE + "(" + - NoteColumns.ID + " INTEGER PRIMARY KEY," + - NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + - NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + - NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," + - NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," + - NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + - NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + - ")"; + "CREATE TABLE " + TABLE.NOTE + "(" + + NoteColumns.ID + " INTEGER PRIMARY KEY," + + NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," + + NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + + ")";//数据库中需要存储的项目的名称,就相当于创建一个表格的表头的内容。 private static final String CREATE_DATA_TABLE_SQL = - "CREATE TABLE " + TABLE.DATA + "(" + - DataColumns.ID + " INTEGER PRIMARY KEY," + - DataColumns.MIME_TYPE + " TEXT NOT NULL," + - DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + - NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + - DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," + - DataColumns.DATA1 + " INTEGER," + - DataColumns.DATA2 + " INTEGER," + - DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + - DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + - DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + - ")"; + "CREATE TABLE " + TABLE.DATA + "(" + + DataColumns.ID + " INTEGER PRIMARY KEY," + + DataColumns.MIME_TYPE + " TEXT NOT NULL," + + DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA1 + " INTEGER," + + DataColumns.DATA2 + " INTEGER," + + DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + + ")";//和上面的功能一样,主要是存储的项目不同 private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = - "CREATE INDEX IF NOT EXISTS note_id_index ON " + - TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; + "CREATE INDEX IF NOT EXISTS note_id_index ON " + + TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";//存储便签编号的一个数据表格 /** * Increase folder's note count when move note to the folder */ private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = - "CREATE TRIGGER increase_folder_count_on_update "+ - " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + - " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END"; + "CREATE TRIGGER increase_folder_count_on_update "+ + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END";//在文件夹中移入一个Note之后需要更改的数据的表格。 /** * Decrease folder's note count when move note from folder */ private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = - "CREATE TRIGGER decrease_folder_count_on_update " + - " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + - " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + - " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + - " END"; + "CREATE TRIGGER decrease_folder_count_on_update " + + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + + " END";//在文件夹中移出一个Note之后需要更改的数据的表格。 /** * Increase folder's note count when insert new note to the folder */ private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = - "CREATE TRIGGER increase_folder_count_on_insert " + - " AFTER INSERT ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + - " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END"; + "CREATE TRIGGER increase_folder_count_on_insert " + + " AFTER INSERT ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END";//在文件夹中插入一个Note之后需要更改的数据的表格。 /** * Decrease folder's note count when delete note from the folder */ private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = - "CREATE TRIGGER decrease_folder_count_on_delete " + - " AFTER DELETE ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + - " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + - " AND " + NoteColumns.NOTES_COUNT + ">0;" + - " END"; + "CREATE TRIGGER decrease_folder_count_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0;" + + " END";//在文件夹中删除一个Note之后需要更改的数据的表格。 /** * Update note's content when insert data with type {@link DataConstants#NOTE} */ private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = - "CREATE TRIGGER update_note_content_on_insert " + - " AFTER INSERT ON " + TABLE.DATA + - " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + - " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END"; + "CREATE TRIGGER update_note_content_on_insert " + + " AFTER INSERT ON " + TABLE.DATA + + " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END";//在文件夹中对一个Note导入新的数据之后需要更改的数据的表格。 /** * Update note's content when data with {@link DataConstants#NOTE} type has changed */ private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = - "CREATE TRIGGER update_note_content_on_update " + - " AFTER UPDATE ON " + TABLE.DATA + - " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + - " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END"; + "CREATE TRIGGER update_note_content_on_update " + + " AFTER UPDATE ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END";//Note数据被修改后需要更改的数据的表格。 /** * Update note's content when data with {@link DataConstants#NOTE} type has deleted */ private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = - "CREATE TRIGGER update_note_content_on_delete " + - " AFTER delete ON " + TABLE.DATA + - " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.SNIPPET + "=''" + - " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + - " END"; + "CREATE TRIGGER update_note_content_on_delete " + + " AFTER delete ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=''" + + " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + + " END";//Note数据被删除后需要更改的数据的表格。 /** * Delete datas belong to note which has been deleted */ private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = - "CREATE TRIGGER delete_data_on_delete " + - " AFTER DELETE ON " + TABLE.NOTE + - " BEGIN" + - " DELETE FROM " + TABLE.DATA + - " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + - " END"; + "CREATE TRIGGER delete_data_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.DATA + + " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + + " END";//删除已删除的便签的数据后需要更改的数据的表格。 /** * Delete notes belong to folder which has been deleted */ private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = - "CREATE TRIGGER folder_delete_notes_on_delete " + - " AFTER DELETE ON " + TABLE.NOTE + - " BEGIN" + - " DELETE FROM " + TABLE.NOTE + - " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; + "CREATE TRIGGER folder_delete_notes_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END";//删除已删除的文件夹的便签后需要更改的数据的表格。 /** * Move notes belong to folder which has been moved to trash folder */ private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = - "CREATE TRIGGER folder_move_notes_on_trash " + - " AFTER UPDATE ON " + TABLE.NOTE + - " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + - " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; + "CREATE TRIGGER folder_move_notes_on_trash " + + " AFTER UPDATE ON " + TABLE.NOTE + + " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END";//还原垃圾桶中便签后需要更改的数据的表格。 public NotesDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); - } + }//构造函数,传入数据库的名称和版本 public void createNoteTable(SQLiteDatabase db) { db.execSQL(CREATE_NOTE_TABLE_SQL); reCreateNoteTableTriggers(db); createSystemFolder(db); Log.d(TAG, "note table has been created"); - } + }//创建表格(用来存储标签属性) private void reCreateNoteTableTriggers(SQLiteDatabase db) { db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_update"); @@ -233,7 +217,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER); db.execSQL(FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER); db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER); - } + }//execSQL是数据库操作的API,主要是更改行为的SQL语句。 + //在这里主要是用来重新创建上述定义的表格用的,先删除原来有的数据库的触发器再重新创建新的数据库 private void createSystemFolder(SQLiteDatabase db) { ContentValues values = new ContentValues(); @@ -268,14 +253,14 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); db.insert(TABLE.NOTE, null, values); - } + }//创建几个系统文件夹 public void createDataTable(SQLiteDatabase db) { db.execSQL(CREATE_DATA_TABLE_SQL); reCreateDataTableTriggers(db); db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL); Log.d(TAG, "data table has been created"); - } + }//创建表格(用来存储标签内容) private void reCreateDataTableTriggers(SQLiteDatabase db) { db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); @@ -285,20 +270,22 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER); db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER); db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER); - } + }//同上面的execSQL static synchronized NotesDatabaseHelper getInstance(Context context) { if (mInstance == null) { mInstance = new NotesDatabaseHelper(context); } return mInstance; - } + }//上网查是为解决同一时刻只能有一个线程执行. + //在写程序库代码时,有时有一个类需要被所有的其它类使用, + //但又要求这个类只能被实例化一次,是个服务类,定义一次,其它类使用同一个这个类的实例 @Override public void onCreate(SQLiteDatabase db) { createNoteTable(db); createDataTable(db); - } + }//实现两个表格(上面创建的两个表格) @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { @@ -331,14 +318,14 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { throw new IllegalStateException("Upgrade notes database to version " + newVersion + "fails"); } - } + }//数据库版本的更新(数据库内容的更改) private void upgradeToV2(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE); db.execSQL("DROP TABLE IF EXISTS " + TABLE.DATA); createNoteTable(db); createDataTable(db); - } + }//更新到V2版本 private void upgradeToV3(SQLiteDatabase db) { // drop unused triggers @@ -353,10 +340,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); db.insert(TABLE.NOTE, null, values); - } + }//更新到V3版本 private void upgradeToV4(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0"); - } -} + }//更新到V4版本,但是不知道V2、V3、V4是什么意思 +} \ No newline at end of file diff --git a/src/main/java/net/micode/notes/data/NotesProvider.java b/src/main/java/net/micode/notes/data/NotesProvider.java index edb0a60..6897999 100644 --- a/src/main/java/net/micode/notes/data/NotesProvider.java +++ b/src/main/java/net/micode/notes/data/NotesProvider.java @@ -1,22 +1,5 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (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 - * - * 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.data; - import android.app.SearchManager; import android.content.ContentProvider; import android.content.ContentUris; @@ -33,9 +16,15 @@ import net.micode.notes.R; import net.micode.notes.data.Notes.DataColumns; import net.micode.notes.data.Notes.NoteColumns; import net.micode.notes.data.NotesDatabaseHelper.TABLE; - - +//为存储和获取数据提供接口。可以在不同的应用程序之间共享数据 +//ContentProvider提供的方法 +//query:查询 +//insert:插入 +//update:更新 +//delete:删除 +//getType:得到数据类型 public class NotesProvider extends ContentProvider { + // UriMatcher用于匹配Uri private static final UriMatcher mMatcher; private NotesDatabaseHelper mHelper; @@ -51,7 +40,9 @@ public class NotesProvider extends ContentProvider { private static final int URI_SEARCH_SUGGEST = 6; static { + // 创建UriMatcher时,调用UriMatcher(UriMatcher.NO_MATCH)表示不匹配任何路径的返回码 mMatcher = new UriMatcher(UriMatcher.NO_MATCH); + // 把需要匹配Uri路径全部给注册上 mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA); @@ -65,33 +56,40 @@ public class NotesProvider extends ContentProvider { * x'0A' represents the '\n' character in sqlite. For title and content in the search result, * we will trim '\n' and white space in order to show more information. */ + // 声明 NOTES_SEARCH_PROJECTION private static final String NOTES_SEARCH_PROJECTION = NoteColumns.ID + "," - + NoteColumns.ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + "," - + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 + "," - + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + "," - + R.drawable.search_result + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1 + "," - + "'" + Intent.ACTION_VIEW + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION + "," - + "'" + Notes.TextNote.CONTENT_TYPE + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA; - + + NoteColumns.ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + "," + + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 + "," + + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + "," + + R.drawable.search_result + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1 + "," + + "'" + Intent.ACTION_VIEW + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION + "," + + "'" + Notes.TextNote.CONTENT_TYPE + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA; + // 声明NOTES_SNIPPET_SEARCH_QUERY private static String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION - + " FROM " + TABLE.NOTE - + " WHERE " + NoteColumns.SNIPPET + " LIKE ?" - + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER - + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; + + " FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.SNIPPET + " LIKE ?" + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; @Override + // Context只有在onCreate()中才被初始化 + // 对mHelper进行实例化 public boolean onCreate() { mHelper = NotesDatabaseHelper.getInstance(getContext()); return true; } @Override + // 查询uri在数据库中对应的位置 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, - String sortOrder) { + String sortOrder) { Cursor c = null; + // 获取可读数据库 SQLiteDatabase db = mHelper.getReadableDatabase(); String id = null; + // 匹配查找uri switch (mMatcher.match(uri)) { + // 对于不同的匹配值,在数据库中查找相应的条目 case URI_NOTE: c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null, sortOrder); @@ -113,6 +111,7 @@ public class NotesProvider extends ContentProvider { case URI_SEARCH: case URI_SEARCH_SUGGEST: if (sortOrder != null || projection != null) { + // 不合法的参数异常 throw new IllegalArgumentException( "do not specify sortOrder, selection, selectionArgs, or projection" + "with this query"); } @@ -120,6 +119,8 @@ public class NotesProvider extends ContentProvider { String searchString = null; if (mMatcher.match(uri) == URI_SEARCH_SUGGEST) { if (uri.getPathSegments().size() > 1) { + // getPathSegments()方法得到一个String的List, + // 在uri.getPathSegments().get(1)为第2个元素 searchString = uri.getPathSegments().get(1); } } else { @@ -139,6 +140,7 @@ public class NotesProvider extends ContentProvider { } break; default: + // 抛出异常 throw new IllegalArgumentException("Unknown URI " + uri); } if (c != null) { @@ -148,13 +150,17 @@ public class NotesProvider extends ContentProvider { } @Override + // 插入一个uri public Uri insert(Uri uri, ContentValues values) { + // 获得可写的数据库 SQLiteDatabase db = mHelper.getWritableDatabase(); long dataId = 0, noteId = 0, insertedId = 0; switch (mMatcher.match(uri)) { + // 新增一个条目 case URI_NOTE: insertedId = noteId = db.insert(TABLE.NOTE, null, values); break; + // 如果存在,查找NOTE_ID case URI_DATA: if (values.containsKey(DataColumns.NOTE_ID)) { noteId = values.getAsLong(DataColumns.NOTE_ID); @@ -167,6 +173,7 @@ public class NotesProvider extends ContentProvider { throw new IllegalArgumentException("Unknown URI " + uri); } // Notify the note uri + // notifyChange获得一个ContextResolver对象并且更新里面的内容 if (noteId > 0) { getContext().getContentResolver().notifyChange( ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null); @@ -178,13 +185,17 @@ public class NotesProvider extends ContentProvider { ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), null); } + // 返回插入的uri的路径 return ContentUris.withAppendedId(uri, insertedId); } @Override + // 删除一个uri public int delete(Uri uri, String selection, String[] selectionArgs) { + //Uri代表要操作的数据,Android上可用的每种资源 -包括 图像、视频片段、音频资源等都可以用Uri来表示。 int count = 0; String id = null; + // 获得可写的数据库 SQLiteDatabase db = mHelper.getWritableDatabase(); boolean deleteData = false; switch (mMatcher.match(uri)) { @@ -228,6 +239,7 @@ public class NotesProvider extends ContentProvider { } @Override + // 更新一个uri public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int count = 0; String id = null; @@ -267,10 +279,12 @@ public class NotesProvider extends ContentProvider { return count; } + // 将字符串解析成规定格式 private String parseSelection(String selection) { return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); } + //增加一个noteVersion private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { StringBuilder sql = new StringBuilder(120); sql.append("UPDATE "); @@ -293,6 +307,7 @@ public class NotesProvider extends ContentProvider { sql.append(selectString); } + // execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句 mHelper.getWritableDatabase().execSQL(sql.toString()); } @@ -302,4 +317,4 @@ public class NotesProvider extends ContentProvider { return null; } -} +} \ No newline at end of file -- 2.34.1