package Ġcom . dom burg . new note . utils Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Documents Contract Ċ import Ġjava . util .* ĊĊ Ċ // Ġsimilar Ġto ĠDocument File , Ġbut Ġstore Ġmetadata Ġat Ġfirst Ġquery . Ċ data Ġclass ĠFast File ( val Ġuri : ĠUri , Ġval Ġname : ĠString , Ġval Ġlast Modified : ĠLong , Ġval ĠmimeType : ĠString , Ġval Ġsize : ĠLong , Ġval Ġresolver : ĠContent Resolver ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Long ( cur : ĠCursor , ĠcolumnName : ĠString ) Ġ: ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġcur . getColumnIndex ( columnName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur . isNull ( index )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcur . getLong ( index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetString ( cur : ĠCursor , ĠcolumnName : ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġcur . getColumnIndex ( columnName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur . isNull ( index )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcur . getString ( index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfrom Cursor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur : ĠCursor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri : ĠUri , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolver : ĠContent Resolver ĊĠĠĠĠĠĠĠ Ġ): ĠFast File Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisp Ġ= ĠgetString ( cur , ĠDocuments Contract . Document . COLUMN _ DISPLAY _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlm Ġ= Ġget Long ( cur , ĠDocuments Contract . Document . COLUMN _ LAST _ MODI FIED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmimeType Ġ= ĠgetString ( cur , ĠDocuments Contract . Document . COLUMN _ MIME _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġget Long ( cur , ĠDocuments Contract . Document . COLUMN _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFast File ( uri , Ġdisp , Ġlm , ĠmimeType , Ġsize , Ġresolver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfile ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġlist Files ( resolver : ĠContent Resolver , Ġparent : ĠUri ) Ġ: ĠSequence < Fast File > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchildren Uri Ġ= ĠDocuments Contract . build Child Documents Uri Using Tree ( parent , ĠDocuments Contract . getDocument Id ( parent )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġresolver . query ( children Uri , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġnull ) Ġ?: Ġreturn Ġempty Sequence () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . use Ġ{ cur Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( cur . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= Ġcur . getString ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠDocuments Contract . build Document Uri Using Tree ( parent , Ġdoc Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( from Cursor ( cur , Ġuri , Ġresolver )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠ Ġ@ Nullable ĊĠĠĠ Ġprivate Ġstatic ĠString Ġquery For String ( Context Ġcontext , ĠUri Ġself , ĠString Ġcolumn , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nullable ĠString ĠdefaultValue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinal ĠContent Resolver Ġresolver Ġ= Ġcontext . getContent Resolver (); ĊĊĠĠĠĠĠĠĠ ĠCursor Ġc Ġ= Ġnull ; ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġresolver . query ( self , Ġnew ĠString []{ column }, Ġnull , Ġnull , Ġnull ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c . moveTo First () Ġ&& Ġ! c . isNull ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġc . getString ( 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠdefaultValue ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( Exception Ġe ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Failed Ġquery : Ġ" Ġ+ Ġe ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠdefaultValue ; ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Quiet ly ( c ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ// ĠSimilar Ġto ĠDocument File : from Tree Uri . ĊĠĠĠĠĠĠĠ Ġ// Ġtree Uri Ġis ĠIntent # getData () Ġof ĠACTION _ OPEN _ DOCUMENT _ TREE ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Tree Uri ( context : ĠContext , Ġtree Uri : ĠUri ) Ġ: ĠFast File Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= Ġ( if ( Documents Contract . is Document Uri ( context , Ġtree Uri )) ĠDocuments Contract . getDocument Id ( tree Uri ) Ġelse ĠDocuments Contract . get Tree Document Id ( tree Uri )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġget Ġdocument Uri Ġfrom Ġ$ tree Uri ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtree Doc Uri Ġ= ĠDocuments Contract . build Document Uri Using Tree ( tree Uri , Ġdoc Id ) Ġ?: Ġthrow ĠNullPointerException (" Failed Ġto Ġbuild Ġdocument Uri Ġfrom Ġ$ tree Uri ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolver Ġ= Ġcontext . content Resolver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfrom Doc Uri ( resolver , Ġtree Doc Uri ) Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġquery Ġfrom Ġ$ tree Uri ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Doc Uri ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolver : ĠContent Resolver , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtree Doc Uri : ĠUri ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠFast File ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġresolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtree Doc Uri , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . use Ġ{ Ġcur Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cur . moveTo First ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfrom Cursor ( cur , Ġtree Doc Uri , Ġresolver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġis Directory Ġ: ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠDocuments Contract . Document . MIME _ TYPE _ DIR Ġ== ĠmimeType ĊĊĠĠĠ Ġval Ġis File : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ!( isDirectory Ġ|| ĠmimeType Ġ== Ġ"") ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// Ġ Ġfuncs Ġbelow Ġare Ġfor Ġdirectory Ġonly ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġfun Ġcreate File ( file MimeType : ĠString , Ġfile DisplayName : ĠString ) Ġ: ĠFast File ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDocuments Contract . create Document ( resolver , Ġuri , Ġfile MimeType , Ġfile DisplayName ) Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġthis Ġlast Ġmodified Ġmight Ġbe Ġslight Ġdifferent Ġto Ġreal Ġfile Ġlast Modified , Ġbut ĠI Ġthink Ġit 's Ġnot Ġbig Ġdeal . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFast File ( it , Ġfile DisplayName , Ġ( Date ()). time , Ġfile MimeType , Ġ 0 , Ġresolver ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlist Files () Ġ= Ġ Ġlist Files ( resolver , Ġuri ) ĊĊĠĠĠ Ġfun Ġfind File ( target DisplayName : ĠString ) Ġ= Ġlist Files (). find Ġ{ Ġit . name Ġ== Ġtarget DisplayName Ġ} ĊĊĠĠĠ Ġfun Ġcreate Directory ( displayName : ĠString ): ĠFast File ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Uri Ġ= ĠDocuments Contract . create Document ( resolver , Ġuri , ĠDocuments Contract . Document . MIME _ TYPE _ DIR , ĠdisplayName ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġfrom Doc Uri ( resolver , Ġres Uri ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠisEmpty Ġ: ĠBoolean ĊĠĠĠĠĠĠĠ Ġget (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isFile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 L Ġ== Ġsize ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ } ĊĊĊ