package Ġaf kt . app . utils Ċ Ċ import Ġaf kt . app . base . model . File A pk Item Ċ import Ġdev . callback . Dev Callback Ċ import Ġdev . kotlin . engine . log . log _ d Ċ import Ġdev . utils . app . Path Utils Ċ import Ġdev . utils . app . info . App Info Utils Ċ import Ġdev . utils . common . StringUtils Ċ import Ġdev . utils . common . assist . search . File B read th First Search Utils Ċ import Ġdev . utils . common . thread . Dev ThreadPool Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġdetail : Ġ æī«æıı ĠSD Card Ġ å·¥åħ· ç±» Ċ Ġ* Ġ@ author ĠT tt Ċ Ġ*/ Ċ class ĠScan SD Card Utils Ġprivate Ġconstructor () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠScan SD Card Utils Ġby Ġlazy ( mode Ġ= ĠLazy Thread Safety Mode . SYN CH RON IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScan SD Card Utils () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġæĸĩä»¶ å¹¿ åº¦ ä¼ĺåħĪ æĲľç´¢ ç®Ĺæ³ķ Ġ( Ġ å¤ļ çº¿ç¨ĭ Ġ+ Ġ éĺŁåĪĹ , Ġæ Ĳ ľç´¢ æŁĲä¸ª çĽ®å½ķ ä¸ĭçļĦ åħ¨éĥ¨ æĸĩä»¶ Ġ) ĊĠĠĠ Ġprivate Ġvar Ġutils : ĠFile B read th First Search Utils ĊĊĠĠĠ Ġ// Ġæ Ĳ ľç´¢ åĲİ ç¼Ģ ĊĠĠĠ Ġprivate Ġvar Ġquery Suffix Array : ĠArray < String > Ġ= ĠarrayOf ("") ĊĊĠĠĠ Ġ// Ġæ Ĳ ľç´¢ åĲİ çļĦæķ°æį® Ġ( Ġ èĬĤ çľģ èµĦæºĲ , Ġä¸į éģįåİĨ ĠFile B read th First Search Utils . File Item Ġ) ĊĠĠĠ Ġprivate Ġvar Ġfiles : ĠArrayList < File > Ġ= ĠArrayList () ĊĊĠĠĠ Ġ// Ġ è½¬æį¢ åĲİ çļĦæķ°æį® ĊĠĠĠ Ġprivate Ġvar Ġdata : ĠArrayList < File A pk Item >? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġæ Ĳ ľç´¢ åĽŀè°ĥ ĊĠĠĠ Ġprivate Ġvar Ġs Callback : ĠDev Callback < ArrayList < File A pk Item >> ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĲľç´¢ åĽŀè°ĥ ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġ[ Dev Callback ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Callback ( callback : ĠDev Callback < ArrayList < File A pk Item >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġs Callback Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġutils Ġ= ĠFile B read th First Search Utils ( object Ġ: ĠFile B read th First Search Utils . Search Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Handler File ( file : ĠFile ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Add ToList ( file : ĠFile ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( StringUtils . is EndsWith ( true , Ġfile . name , Ġ* query Suffix Array )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . add ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon End Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot File Item : ĠFile B read th First Search Utils . File Item ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendTime : ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog _ d ( message Ġ= Ġ" æĲľç´¢ èĢĹ æĹ¶ : Ġ${ endTime Ġ- ĠstartTime } Ġms ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlists Ġ= Ġconvert List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . sort ( lists , ĠA pk Lists Comparator ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġlists ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Callback ?. callback ( lists ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġutils . set Queue Same Time Number ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev ThreadPool . get Calc Threads () ĊĠĠĠĠĠĠĠ Ġ). delay Time Ġ= Ġ 1 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼Ģå§ĭ æĲľç´¢ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġquery () Ġ{ ĊĠĠĠĠĠĠĠ Ġquery ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼Ģå§ĭ æĲľç´¢ ĊĠĠĠĠ Ġ* Ġ@ param Ġrefresh Ġæĺ¯åĲ¦ åĪ·æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġquery ( refresh : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull Ġ&& Ġ! refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Callback ?. callback ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( utils . isRunning ) Ġreturn ĊĠĠĠĠĠĠĠ Ġquery Suffix Array Ġ= ĠQuery Suffix Utils . query Suffix Array ĊĠĠĠĠĠĠĠ Ġfiles Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġutils . query ( Path Utils . get SD Card (). sd Card Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ========== ĊĠĠĠ Ġ// Ġ= Ġ åĨħéĥ¨ æĸ¹æ³ķ Ġ= ĊĠĠĠ Ġ// Ġ========== ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è½¬æį¢ å¤ĦçĲĨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconvert List (): ĠArrayList < File A pk Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlists Ġ= ĠArrayList < File A pk Item >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġfiles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Info Bean Ġ= ĠApp Info Utils . getApp Info Bean To Path ( file . path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Info Bean ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlists . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile A pk Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile , Ġfile . name , Ġfile . path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Info Bean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlists ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠA pk Lists Comparator Ġ: ĠComparator < File A pk Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa _ apk : ĠFile A pk Item , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb _ apk : ĠFile A pk Item ĊĠĠĠĠĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( b _ apk Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( a _ apk . lastModified Ġ== Ġb _ apk . lastModified ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ// Ġå®īè£ħ æĹ¶éĹ´ çĽ¸ çŃī ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġ è¿ĳ æľŁ å®īè£ħ çļĦ åľ¨ æľĢ åīį éĿ¢ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( a _ apk . lastModified Ġ> Ġb _ apk . lastModified ) Ġ- 1 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }