package Ġcom . and ref il gs . file man library Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . and ref il gs . file man . File man Ċ import Ġcom . and ref il gs . file man . File man Drivers Ċ import Ġcom . and ref il gs . file man . aux iliar . File man Logger Ċ import Ġcom . and ref il gs . file man . aux iliar . or Default Ċ import Ġcom . and ref il gs . file man . model . File man Feedback Ċ import Ġcom . and ref il gs . file man . model . enums . File man Commands Ċ import Ġcom . and ref il gs . file man . model . enums . File man Status Ċ import Ġcom . and ref il gs . file man . work manager . File man WM Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* ĊĊ Ċ // ĠThis Ġis Ġthe Ġsimplest Ġexample Ġfor Ġusing ĠFile man ĠLibrary Ġ( without Ġusing ĠData Binding , ĠD agger , ĠCor outine ). Ċ // ĠDon 't Ġuse Ġit Ġas Ġan Ġexample Ġfor Ġa Ġgood Ġarchitecture Ġsolution . Ċ // ĠThe Ġ" sync " Ġmode Ġwill Ġfreeze Ġthe ĠUI Ġfor Ġtutorial Ġpurpose . Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĊĠ Ġprivate Ġval ĠSY NC Ġ= Ġ" Sync " ĊĠ Ġprivate Ġval ĠAS Y NC Ġ= Ġ" Async " ĊĠ Ġprivate Ġval ĠLA UNCH Ġ= Ġ" Launch " ĊĠĠĊĠ Ġprivate Ġval Ġlaunch Mode Options Ġ= ĠlistOf < String >( SYNC , ĠAS Y NC , ĠLA UNCH ) ĊĠĠĊĠ Ġprivate Ġlateinit Ġvar Ġfile man WM : ĠFile man WM ĊĠĠĊĠ Ġ// Ġprivate Ġvar Ġm Drive Ġ= ĠFile man Drivers . Sand Box . type ĠĠĠ Ġ// Ġ 0 Ġ= Ġstore Ġat ĠSand Box ĊĠ Ġprivate Ġvar Ġm Drive Ġ= ĠFile man Drivers . Internal . type Ġ// Ġ 1 Ġ= Ġstore Ġat ĠInternal Ġdevice ĊĠ Ġ// Ġprivate Ġvar Ġm Drive Ġ= ĠFile man Drivers . External . type ĠĠ Ġ// Ġ 2 Ġ= Ġstore Ġat ĠExternal Ġdevice Ġ( SD Ġcard ) ĊĠĠĊĠ Ġprivate Ġvar Ġm Folder Ġ= Ġ" My Folder " ĊĠ Ġprivate Ġvar Ġm Filename Ġ= Ġ"" ĊĠ Ġprivate Ġvar Ġm FileContent Ġ= Ġ"" ĊĠ Ġprivate Ġvar Ġm Append Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġm Timeout Ġ= Ġ 5 0 0 0 L Ġ Ġ// general ĊĠ Ġprivate Ġvar Ġm Timeout 2 Ġ= Ġ 5 0 0 0 L Ġ// for Ġmulti Ġthread Ġonly ĊĠĠĊĠ Ġ// Ġprivate Ġvar Ġm Async Ġ= Ġtrue ĊĠ Ġprivate Ġvar Ġm Launch Mode Index Ġ= Ġlaunch Mode Options . indexOf (" Launch ") Ġ// use ĠLaunch ĊĠĠĊĠĠĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠ Ġ// ĠFile man Logger . disable Log () Ġ// for Ġproduction ĊĠĠĠ ĠFile man Logger . enable Log () Ġ// for Ġdevelopment ĊĠĠĠ ĠFile man Logger . set File man Log Tag ( File man Logger . getFile man Log Tag () Ġ+ Ġ" my TAG ") Ġ// to Ġoverride ĠFile man Logger ĠTAG ĊĠĠĠĠĊĠĠĠ Ġ// Ġfile man WM Ġ= ĠFile man WM ( context Ġ= Ġthis , Ġview life Cycle Owner Ġ= Ġthis , Ġstatus Feed Back Level Ġ= Ġ ĠFile man Status . IDLE ) ĠĠĠĠĠĠ Ġ// you Ġcan Ġset Ġwhich Ġlevel Ġyou Ġwant Ġto Ġsee Ġat Ġfile man Feedback ĠObserver , ĠID LE Ġis Ġthe ĠDefault ĊĠĠĠ Ġ// Ġfile man WM Ġ= ĠFile man WM ( context Ġ= Ġthis , Ġview life Cycle Owner Ġ= Ġthis , Ġstatus Feed Back Level Ġ= Ġ ĠFile man Status . SUCCEEDED ) Ġ Ġ// only ĠSU CCEEDED , ĠFAILURE Ġor ĠCANCEL LED Ġwill Ġbe Ġtriggered ĊĠĠĠ Ġfile man WM Ġ= ĠFile man WM ( context Ġ= Ġthis , Ġview life Cycle Owner Ġ= Ġthis ) ĊĠĠĠ Ġdismiss Loading () ĊĠĠĠ Ġset Click Listeners () ĊĠĠĠ Ġset Spinner () ĊĠĠĠ Ġset Seek Bars () ĊĠĠĠĠĊĠĠĠ Ġfile man WM . file man Feedback . observe ( this , ĠObserver Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠ Ġupdate Text ( output ) ĊĠĠĠ Ġ}) ĊĠĠĠĠĊĠĠĠ Ġfile man WM . error Feedback . observe ( this , ĠObserver Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠ Ġupdate Text ( output ) ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĠĠĊĠ Ġprivate Ġfun Ġset Spinner () Ġ{ ĊĠĠĠ Ġval Ġarray Adapter : ĠArray Adapter < String > Ġ= ĠArray Adapter ( this , Ġandroid . R . layout . simple _ expand able _ list _ item _ 1 , Ġlaunch Mode Options ) ĊĠĠĠ Ġarray Adapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) ĊĠĠĠ Ġspinner _ run _ mode . adapter Ġ= Ġarray Adapter ĊĠĠĠ Ġspinner _ run _ mode . on ItemSelected Listener Ġ= Ġthis ĊĠ Ġ} ĊĠĠĊĠĠĊĠ Ġprivate Ġfun Ġset Seek Bars () Ġ{ ĊĠĠĠ Ġtv _ timeout _ value . text Ġ= Ġbuild Timeout Values Message Ġ( seek Bar _ timeout . progress , Ġseek Bar _ timeout 2 . progress Ġ) ĊĠĠĠ Ġseek Bar _ timeout ?. setOn Seek Bar ChangeListener ( object Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek : ĠSeek Bar , Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĊĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek : ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĊĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek : ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtv _ timeout _ value . text Ġ= Ġbuild Timeout Values Message Ġ( seek Bar _ timeout . progress , Ġseek Bar _ timeout 2 . progress Ġ) ĊĠĠĠĠĠĠĠ Ġm Timeout Ġ= Ġconvert Seek To Timeout ( seek Bar _ timeout . progress ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĊĠĠĠ Ġseek Bar _ timeout 2 ?. setOn Seek Bar ChangeListener ( object Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek : ĠSeek Bar , Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek : ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek : ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtv _ timeout _ value . text Ġ= Ġbuild Timeout Values Message Ġ( seek Bar _ timeout . progress , Ġseek Bar _ timeout 2 . progress Ġ) ĊĠĠĠĠĠĠĠ Ġm Timeout 2 Ġ= Ġconvert Seek To Timeout ( seek Bar _ timeout 2 . progress ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĠĠĊĠ Ġprivate Ġfun Ġbuild Timeout Values Message ( timeout 1 : Int , Ġtimeout 2 : Int ): String { ĊĠĠĠ Ġval Ġstatus Ġ= Ġif ( Ġtimeout 1 Ġ> Ġtimeout 2 ) Ġ" Will Ġnot Ġwrite " Ġelse Ġ" Will Ġwrite " ĊĠĠĠ Ġreturn Ġ"${ convert Seek To Timeout ( seek Bar _ timeout . progress )/ 1 0 0 0 } Ġseconds Ġ/ Ġ${ convert Seek To Timeout ( seek Bar _ timeout 2 . progress )/ 1 0 0 0 } Ġseconds .$ status " ĊĠ Ġ} ĊĠĠĊĠĠĊĠ Ġprivate Ġfun Ġupdate Text ( file man Feedback : ĠFile man Feedback ) Ġ{ ĊĠĠĠ Ġval Ġcurrent Ġ= Ġtv _ output . text ĊĠĠĠĠĊĠĠĠ Ġtv _ output . text Ġ= Ġ"$ current \ n =============== \ n Worker Id : Ġ${ file man Feedback . worker Id }\ n File man ID : Ġ${ file man Feedback . file man Id }\ n State : Ġ${ file man Feedback . status Name }\ n Message : Ġ${ file man Feedback . message }\ n Progress : Ġ${ file man Feedback . progress Message }\ n Is ĠFinal : Ġ${ file man Feedback . is Final Worker }" ĊĠĠĠĠĊĠĠĠ Ġif Ġ( file man Feedback . status . or Default (- 1 ) Ġ> ĠFile man Status . SUCCEEDED . type ) Ġ{ ĊĠĠĠĠĠ Ġdismiss Loading () ĊĠĠĠ Ġ} Ġelse Ġif Ġ( file man Feedback . is Final Worker . or Default () Ġ&& Ġfile man Feedback . status . or Default (- 1 ) Ġ>= ĠFile man Status . SUCCEEDED . type ) Ġ{ ĊĠĠĠĠĠ Ġdismiss Loading () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠĠĊĠ Ġprivate Ġfun Ġset Output Message ( message : ĠString ?) Ġ{ ĊĠĠĠ Ġtv _ output . text Ġ= Ġmessage ĊĠ Ġ} ĊĠĠĊĠĠĊĠ Ġprivate Ġfun Ġshow Loading () Ġ{ ĊĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠ Ġ} ĊĠĠĊĠ Ġprivate Ġfun Ġdismiss Loading () Ġ{ ĊĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠ Ġ} ĊĠĠĊĠ Ġprivate Ġfun Ġset Click Listeners () Ġ{ ĊĠĠĠ Ġbtn _ clear _ output . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġset Output Message ("") ĊĠĠĠĠĠ Ġdismiss Loading () ĊĠĠĠĠĠ Ġfile man WM . cancel All Works () ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġbtn _ delete _ file . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġbegin Command () ĊĠĠĠĠĠ Ġrun File man Command ( File man Commands . DELETE ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġbtn _ write . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġbegin Command () ĊĠĠĠĠĠ Ġrun File man Command ( File man Commands . WRITE ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġbtn _ write _ large . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġbegin Command () ĊĠĠĠĠĠĠĊĠĠĠĠĠ Ġ// One Ġtest ĊĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 .. 3 0 ){ ĊĠĠĠĠĠĠĠ Ġrun File man Command ( File man Commands . WRITE ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĊĠĠĠĠĠ Ġ// Second Ġtest ĊĠĠĠĠĠ Ġ// Ġm FileContent Ġ= Ġbuild Large FileContent () ĊĠĠĠĠĠ Ġ// Ġrun File man Command ( File man Commands . WRITE ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġbtn _ read . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġbegin Command () ĊĠĠĠĠĠ Ġrun File man Command ( File man Commands . READ ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġbtn _ multi _ thread _ write . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġbegin Command () ĊĠĠĠĠĠ Ġif ( m Launch Mode Index Ġ== Ġlaunch Mode Options . indexOf ( SYNC ) Ġ){ ĊĠĠĠĠĠĠĠ Ġset Output Message (" Command Ġmode Ġmust Ġbe Ġ$ ASYNC Ġor Ġ$ LA UNCH ") ĊĠĠĠĠĠĠĠ Ġdismiss Loading () ĊĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠFile man . get Filename FullPath ( this , Ġm Drive , Ġm Folder , Ġm Filename )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġrun File man Command ( File man Commands . WRITE ) ĊĠĠĠĠĠĠĠ Ġfile man WM . lock File WithTimeout ( it , Ġm Timeout ) Ġ// ass uming Ġthe Ġfirst Ġwrite Ġtakes Ġlonger ĊĠĠĠĠĠĠĠ Ġm FileContent Ġ= Ġ"\ n ******** ******* \ n Another ĠWrite :\ n $ m FileContent \ n ******** ******* " ĊĠĠĠĠĠĠĠ Ġrun File man Command ( File man Commands . WRITE , Ġm Timeout 2 ) Ġ Ġ// m Timeout 2 Ġ< Ġm Timeout Ġwill Ġnot Ġwrite Ġand Ġm Timeout 2 Ġ> Ġm Timeout Ġwill Ġwrite ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġbtn _ lock _ file . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġcollect Input () ĊĠĠĠĠĠ ĠFile man . get Filename FullPath ( this , Ġm Drive , Ġm Folder , Ġm Filename )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( m Timeout Ġ== Ġ 0 L ){ ĊĠĠĠĠĠĠĠĠĠ Ġfile man WM . lock File ( it ) ĊĠĠĠĠĠĠĠĠĠ Ġset Output Message (" File Ġ$ m Filename Ġis Ġlocked ") ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠ Ġfile man WM . lock File WithTimeout ( it , Ġm Timeout ) ĊĠĠĠĠĠĠĠĠĠ Ġset Output Message (" File Ġ$ m Filename Ġis Ġlocked Ġwith Ġtimeout Ġ$ m Timeout ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġbtn _ unlock _ file . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġcollect Input () ĊĠĠĠĠĠ ĠFile man . get Filename FullPath ( this , Ġm Drive , Ġm Folder , Ġm Filename )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġfile man WM . unlock File ( it ) ĊĠĠĠĠĠĠĠ Ġset Output Message (" File Ġ$ m Filename Ġis Ġun locked ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠĠĊĠ Ġprivate Ġfun Ġbegin Command () Ġ{ ĊĠĠĠ Ġshow Loading () ĊĠĠĠ Ġcollect Input () ĊĠ Ġ} ĊĠĠĊĠ Ġ// Use ĠData Binding ĊĠ Ġprivate Ġfun Ġcollect Input () Ġ{ ĊĠĠĠ Ġm Filename Ġ= Ġet _ filename . text . toString () ĊĠĠĠ Ġm FileContent Ġ= Ġet _ file _ content . text . toString () ĊĠĠĠ Ġm Append Ġ= Ġcheckbox _ append . isChecked ĊĠĠĠ Ġm Launch Mode Index Ġ= Ġspinner _ run _ mode . selected Item Position ĊĠĠĠ Ġm Timeout Ġ= Ġconvert Seek To Timeout ( seek Bar _ timeout . progress ) ĊĠ Ġ} ĊĠĠĊĠ Ġprivate Ġfun Ġrun File man Command ( file man Command : ĠFile man Commands , Ġtimeout : Long ?= m Timeout ) Ġ{ ĊĠĠĠ Ġwhen Ġ( file man Command ) Ġ{ ĊĠĠĠĠĠ ĠFile man Commands . WRITE Ġ Ġ-> Ġwrite ( timeout ) ĊĠĠĠĠĠ ĠFile man Commands . READ ĠĠ Ġ-> Ġread () ĊĠĠĠĠĠ ĠFile man Commands . DELETE Ġ-> Ġdelete () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠĠĊĠ Ġprivate Ġfun Ġwrite ( timeout : ĠLong ?) Ġ{ ĊĠĠĠ Ġwhen Ġ( m Launch Mode Index ) Ġ{ ĊĠĠĠĠĠ Ġlaunch Mode Options . indexOf ( SYNC ) ĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠFile man . write ( file Content Ġ= Ġm FileContent , Ġcontext Ġ= Ġthis , Ġdrive Ġ= Ġm Drive , Ġfolder Ġ= Ġm Folder , Ġfilename Ġ= Ġm Filename , Ġappend Ġ= Ġm Append ) ĊĠĠĠĠĠĠĠ Ġset Output Message (" Write Ġcommand Ġsuccess Ġ-> Ġ$ res ") ĊĠĠĠĠĠĠĠ Ġdismiss Loading () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlaunch Mode Options . indexOf ( ASYNC ) Ġ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġfile man WM . write Async ( file Content Ġ= Ġm FileContent , Ġcontext Ġ= Ġthis , Ġdrive Ġ= Ġm Drive , Ġfolder Ġ= Ġm Folder , Ġfilename Ġ= Ġm Filename , Ġappend Ġ= Ġm Append , Ġwith Timeout Ġ= Ġtrue , Ġtimeout Ġ= Ġtimeout ?: Ġm Timeout ) ĊĠĠĠĠĠĠĠ Ġset Output Message (" Status : Ġ${ res . status Name }\ n Message : Ġ${ res . message }\ n ID : Ġ${ res . worker Id }") Ġ// This Ġis Ġnot Ġthe Ġfinal Ġresult , Ġjust Ġto Ġcheck Ġif Ġrequest Ġis Ġfine ĊĠĠĠĠĠĠĠ Ġif Ġ( res . status Ġ== Ġnull Ġ|| Ġres . status !! Ġ> ĠFile man Status . SUCCEEDED . type ) Ġdismiss Loading () ĠĠĠĠ Ġ// Dismiss ĠLoading Ġin Ġcase Ġof ĠFailure Ġor ĠCancel led ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlaunch Mode Options . indexOf ( LA UNCH ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġfile man WM . write Launch ( file Content Ġ= Ġm FileContent , Ġcontext Ġ= Ġthis , Ġdrive Ġ= Ġm Drive , Ġfolder Ġ= Ġm Folder , Ġfilename Ġ= Ġm Filename , Ġappend Ġ= Ġm Append , Ġwith Timeout Ġ= Ġtrue , Ġtimeout Ġ= Ġtimeout Ġ?: Ġm Timeout ) ĊĠĠĠĠĠĠĠ Ġset Output Message (" Ob serve Ġfinal Ġworker ĠID : Ġ${ res . worker Id }") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠĠĊĠ Ġprivate Ġfun Ġread () Ġ{ ĊĠĠĠ Ġwhen Ġ( m Launch Mode Index ) Ġ{ ĊĠĠĠĠĠ Ġlaunch Mode Options . indexOf ( SYNC ) ĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Content Ġ= ĠFile man . read ( context Ġ= Ġthis , Ġdrive Ġ= Ġm Drive , Ġfolder Ġ= Ġm Folder , Ġfilename Ġ= Ġm Filename ) ĊĠĠĠĠĠĠĠ Ġset Output Message ("$ m Filename Ġcontent Ġis :\ n $ file Content ") ĊĠĠĠĠĠĠĠ Ġdismiss Loading () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlaunch Mode Options . indexOf ( ASYNC ) Ġ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġfile man WM . read Async ( context Ġ= Ġthis , Ġdrive Ġ= Ġm Drive , Ġfolder Ġ= Ġm Folder , Ġfilename Ġ= Ġm Filename , Ġwith Timeout Ġ= Ġtrue , Ġtimeout Ġ= Ġm Timeout ) ĊĠĠĠĠĠĠĠ Ġset Output Message (" Status : Ġ${ res . status Name }\ n Message : Ġ${ res . message }\ n ID : Ġ${ res . worker Id }") Ġ// This Ġis Ġnot Ġthe Ġfinal Ġresult , Ġjust Ġto Ġcheck Ġif Ġrequest Ġis Ġfine ĊĠĠĠĠĠĠĠ Ġif Ġ( res . status Ġ== Ġnull Ġ|| Ġres . status !! Ġ> ĠFile man Status . SUCCEEDED . type ) Ġdismiss Loading () Ġ// dismiss ĠLoading Ġin Ġcase Ġof ĠFailure Ġor ĠCancel led ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlaunch Mode Options . indexOf ( LA UNCH ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġfile man WM . read Launch ( context Ġ= Ġthis , Ġdrive Ġ= Ġm Drive , Ġfolder Ġ= Ġm Folder , Ġfilename Ġ= Ġm Filename , Ġwith Timeout Ġ= Ġtrue , Ġtimeout Ġ= Ġm Timeout ) ĊĠĠĠĠĠĠĠ Ġset Output Message (" Ob serve Ġfinal Ġworker ĠID : Ġ${ res . worker Id }") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠĠĊĠ Ġprivate Ġfun Ġdelete () Ġ{ ĊĠĠĠ Ġwhen Ġ( m Launch Mode Index ) Ġ{ ĊĠĠĠĠĠ Ġlaunch Mode Options . indexOf ( SYNC ) ĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠFile man . delete ( context Ġ= Ġthis , Ġdrive Ġ= Ġm Drive , Ġfolder Ġ= Ġm Folder , Ġfilename Ġ= Ġm Filename ) ĊĠĠĠĠĠĠĠ Ġset Output Message (" Delete Ġcommand Ġsuccess Ġ-> Ġ$ res ") ĊĠĠĠĠĠĠĠ Ġdismiss Loading () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlaunch Mode Options . indexOf ( ASYNC ) Ġ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġfile man WM . delete Async ( context Ġ= Ġthis , Ġdrive Ġ= Ġm Drive , Ġfolder Ġ= Ġm Folder , Ġfilename Ġ= Ġm Filename , Ġwith Timeout Ġ= Ġtrue , Ġtimeout Ġ= Ġm Timeout ) ĊĠĠĠĠĠĠĠ Ġset Output Message (" Status : Ġ${ res . status Name }\ n Message : Ġ${ res . message }\ n ID : Ġ${ res . worker Id }") Ġ// This Ġis Ġnot Ġthe Ġfinal Ġresult , Ġjust Ġto Ġcheck Ġif Ġrequest Ġis Ġfine ĊĠĠĠĠĠĠĠ Ġif Ġ( res . status Ġ== Ġnull Ġ|| Ġres . status !! Ġ> ĠFile man Status . SUCCEEDED . type ) Ġdismiss Loading () Ġ Ġ// dismiss ĠLoading Ġin Ġcase Ġof ĠFailure Ġor ĠCancel led ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlaunch Mode Options . indexOf ( LA UNCH ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġfile man WM . delete Launch ( context Ġ= Ġthis , Ġdrive Ġ= Ġm Drive , Ġfolder Ġ= Ġm Folder , Ġfilename Ġ= Ġm Filename , Ġwith Timeout Ġ= Ġtrue , Ġtimeout Ġ= Ġm Timeout ) ĊĠĠĠĠĠĠĠ Ġset Output Message (" Ob serve Ġfinal Ġworker ĠID : Ġ${ res . worker Id }") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠĠĊĠĠĊĠ Ġprivate Ġfun Ġbuild Large FileContent (): ĠString Ġ{ ĊĠĠĠ Ġval Ġsb Dummy Large Text Ġ= ĠStringBuffer () ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 1 0 0 0 0 ) Ġ{ ĊĠĠĠĠĠ Ġsb Dummy Large Text . append (" Lorem Ġipsum Ġ$ i \ n ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsb Dummy Large Text . toString () ĊĠ Ġ} ĊĠĠĊĠ Ġoverride Ġfun Ġon Nothing Selected ( p 0 : ĠAdapter View < *> ?) Ġ{ ĊĠ Ġ} ĊĠĠĊĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġp 3 : ĠLong ) Ġ{ ĊĠ Ġ} ĊĠĠĊĠĠĊĠ Ġprivate Ġfun Ġconvert Seek To Timeout ( progress : Int ): Long { ĊĠĠĠ Ġreturn Ġif ( progress Ġ== Ġ 0 ) ĠLong . MAX _ VALUE Ġelse Ġprogress Ġ* Ġ 1 0 0 0 L ĊĠ Ġ} Ċ } Ċ