package Ġcom . react native medi astore Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . provider . Media Store . Images . Media . query Ċ import Ġcom . facebook . react . bridge .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠMed i astore Module ( react Context : ĠReact ApplicationContext ) Ġ: ĠReact Context Base Java Module ( react Context ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Med i astore " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmap Files ( ĊĠĠĠĠĠ Ġis Music : ĠBoolean , ĊĠĠĠĠĠ Ġcollection : ĠUri , ĊĠĠĠĠĠ Ġexternal Content Uri : ĠUri , ĊĠĠĠĠĠ Ġid Column : ĠString , ĊĠĠĠĠĠ Ġname Column : ĠString , ĊĠĠĠĠĠ Ġduration Column : ĠString , ĊĠĠĠĠĠ Ġsize Column : ĠString , ĊĠĠĠĠĠ Ġmime Column : ĠString , ĊĠĠĠĠĠ Ġtitle Column : ĠString , ĊĠĠĠĠĠ Ġalbum Column : ĠString , ĊĠĠĠĠĠ Ġartist Column : ĠString , ĊĠĠĠĠĠ Ġalbum Id : ĠString ĊĠĠĠ Ġ): ĠArray < Writable Map > Ġ{ ĊĊĠĠĠĠĠ Ġval Ġfiles Ġ= Ġmutable ListOf < Writable Map >() ĊĊĠĠĠĠĠ Ġvar Ġprojection Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ Ġid Column , ĊĠĠĠĠĠĠĠ Ġname Column , ĊĠĠĠĠĠĠĠ Ġduration Column , ĊĠĠĠĠĠĠĠ Ġsize Column , ĊĠĠĠĠĠĠĠ Ġmime Column , ĊĠĠĠĠĠĠĠ Ġtitle Column , ĊĠĠĠĠĠĠĠ Ġalbum Column , ĊĠĠĠĠĠĠĠ Ġartist Column ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġif Ġ( is Music ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprojection Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠ Ġid Column , ĊĠĠĠĠĠĠĠĠĠ Ġname Column , ĊĠĠĠĠĠĠĠĠĠ Ġduration Column , ĊĠĠĠĠĠĠĠĠĠ Ġsize Column , ĊĠĠĠĠĠĠĠĠĠ Ġmime Column , ĊĠĠĠĠĠĠĠĠĠ Ġtitle Column , ĊĠĠĠĠĠĠĠĠĠ Ġalbum Column , ĊĠĠĠĠĠĠĠĠĠ Ġartist Column , ĊĠĠĠĠĠĠĠĠĠ Ġalbum Id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġquery Ġ= Ġreact ApplicationContext . content Resolver . query ( ĊĠĠĠĠĠĠĠ Ġcollection , ĊĠĠĠĠĠĠĠ Ġprojection , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġquery ?. use Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġid Column Ġ= Ġcursor . getColumnIndex OrThrow ( id Column ) ĊĠĠĠĠĠĠĠ Ġval Ġname Column Ġ= Ġcursor . getColumnIndex OrThrow ( name Column ) ĊĠĠĠĠĠĠĠ Ġval Ġduration Column Ġ= Ġcursor . getColumnIndex OrThrow ( duration Column ) ĊĠĠĠĠĠĠĠ Ġval Ġsize Column Ġ= Ġcursor . getColumnIndex OrThrow ( size Column ) ĊĠĠĠĠĠĠĠ Ġval Ġmime Column Ġ= Ġcursor . getColumnIndex OrThrow ( mime Column ) ĊĠĠĠĠĠĠĠ Ġval Ġtitle Column Ġ= Ġcursor . getColumnIndex OrThrow ( title Column ) ĊĠĠĠĠĠĠĠ Ġval Ġalbum Column Ġ= Ġcursor . getColumnIndex OrThrow ( album Column ) ĊĠĠĠĠĠĠĠ Ġval Ġartist Column Ġ= Ġcursor . getColumnIndex OrThrow ( artist Column ) ĊĠĠĠĠĠĠĠ Ġvar Ġalbum Id Column Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( is Music ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġalbum Id Column Ġ= Ġcursor . getColumnIndex OrThrow ( album Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠArguments . create Map () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcursor . getLong ( id Column ) ĊĊĠĠĠĠĠĠĠĠĠ Ġitem . put Int (" id ", Ġid . toInt ()) ĊĠĠĠĠĠĠĠĠĠ Ġitem . putString (" name ", Ġcursor . getString ( name Column )) ĊĠĠĠĠĠĠĠĠĠ Ġitem . put Int (" duration ", Ġcursor . getInt ( duration Column )) ĊĠĠĠĠĠĠĠĠĠ Ġitem . put Int (" size ", Ġcursor . getInt ( size Column )) ĊĠĠĠĠĠĠĠĠĠ Ġitem . putString (" mime ", Ġcursor . getString ( mime Column )) ĊĠĠĠĠĠĠĠĠĠ Ġitem . putString (" title ", Ġcursor . getString ( title Column )) ĊĠĠĠĠĠĠĠĠĠ Ġitem . putString (" album ", Ġcursor . getString ( album Column )) ĊĠĠĠĠĠĠĠĠĠ Ġitem . putString (" artist ", Ġcursor . getString ( artist Column )) ĊĠĠĠĠĠĠĠĠĠ Ġitem . putString (" content Uri ", Ġ" content :// media " Ġ+ Ġexternal Content Uri . path Ġ+ Ġ"/" Ġ+ Ġid ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Music ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalbum ID Ġ= Ġcursor . getInt ( album Id Column ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . putString (" album Id ", Ġalbum ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . putString (" album Art " Ġ, Ġ" content :// media / external / audio / album art /" Ġ+ Ġalbum ID ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . putString (" album Id ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . putString (" album Art " Ġ, Ġ"") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġfiles Ġ+= Ġitem ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġfiles . to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ React Method ĊĠĠĠ Ġfun Ġread Audio Video External Med ias ( promise : ĠPromise ) Ġ{ ĊĊĠĠĠĠĠ Ġdata Ġclass ĠMedia ( ĊĠĠĠĠĠĠĠ Ġval Ġuri : ĠUri , ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġduration : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġsize : ĠInt ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġval Ġmedia List Ġ= ĠArguments . create Array () ĊĊĠĠĠĠĠ Ġmap Files ( ĊĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . getContent Uri ( Media Store . VOLUME _ EXTERNAL ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . EXTERNAL _ CONTENT _ URI ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media ._ ID , ĊĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . DISPLAY _ NAME , ĊĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . DURATION , ĊĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . SIZE , ĊĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . MIME _ TYPE , ĊĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . TITLE , ĊĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . AL BU M , ĊĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . AR TI ST , ĊĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . AL BU M _ ID ĊĠĠĠĠĠ Ġ). forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠ Ġmedia List . push Map ( file ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġmap Files ( ĊĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . getContent Uri ( Media Store . VOLUME _ EXTERNAL ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . EXTERNAL _ CONTENT _ URI ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠ ĠMedia Store . Video . Media ._ ID , ĊĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . DISPLAY _ NAME , ĊĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . DURATION , ĊĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . SIZE , ĊĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . MIME _ TYPE , ĊĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . TITLE , ĊĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . AL BU M , ĊĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . AR TI ST , ĊĠĠĠĠĠĠĠ Ġ"" Ġ// ĠVideo Ġmedia Ġdo Ġnot Ġhave Ġalbum Ġid , Ġjust Ġpass Ġan Ġempty Ġstring ĊĠĠĠĠĠ Ġ). forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠ Ġmedia List . push Map ( file ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġpromise . resolve ( media List ) ĊĠĠĠ Ġ} Ċ } Ċ