@ file : Suppress (" unused ", Ġ" Spell Checking Inspection ") Ċ Ċ package Ġid . ind os w . g driver est Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Open able Columns Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Pair Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Account Ċ import Ġcom . google . android . gms . drive . Drive Folder Ċ import Ġcom . google . android . gms . tasks . Task Ċ import Ġcom . google . android . gms . tasks . Tasks Ċ import Ġcom . google . api . client . extensions . android . http . Android Http Ċ import Ġcom . google . api . client . googleapis . extensions . android . gms . auth . Google Account Credential Ċ import Ġcom . google . api . client . http . Abstract InputStream Content Ċ import Ġcom . google . api . client . http . ByteArray Content Ċ import Ġcom . google . api . client . http . FileContent Ċ import Ġcom . google . api . client . json . gson . Gson Factory Ċ import Ġcom . google . api . services . drive . Drive Ċ import Ġcom . google . api . services . drive . Drive Scopes Ċ import Ġcom . google . api . services . drive . model . File Ċ import Ġcom . google . api . services . drive . model . FileList Ċ import Ġjava . io .* Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Executor Ċ import Ġjava . util . concurrent . Executors Ċ Ċ /* Ċ ĠCopyright Ġ 2 0 1 8 ĠGoogle ĠLLC Ċ Ġ< p > Ċ Ġ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 Ċ Ġ< p > Ċ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ< p > Ċ Ġ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 . Ċ */ Ċ @ Deprecated (""" ĊĠ ĠSupport Ġfor Ġstoring Ġand Ġsync ing Ġin Ġthe Ġapp Ġdata Ġfolder Ġwill Ġlikely Ġbe Ġremoved Ġfrom ĠDrive Ġin Ġthe Ġfuture . ĊĠ ĠClients Ġrequiring Ġapp Ġdata Ġstorage Ġare Ġstrongly Ġencour aged Ġto Ġmigrate Ġto Ġa Ġnon - Drive Ġsolution Ġsuch Ġas ĠCloud ĠFire store . ĊĠ Ġhttps :// developers . google . com / drive / android / deprecation """) Ċ class ĠApp Data Drive Service Helper ( private Ġval Ġm Drive Service : ĠDrive ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Executor : ĠExecutor Ġ= ĠExec utors . new Single Thread Executor () ĊĠĠĠ Ġfun Ġcreate File ( fileName : ĠString ?): ĠTask < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Parents ( listOf (" root ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MimeType (" text / plain ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( fileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle File Ġ= Ġm Drive Service . files (). create ( metadata ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIOException (" Null Ġresult Ġwhen Ġrequesting Ġfile Ġcreation .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle File . id ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate File ( fileName : ĠString ?, Ġfolder Id : ĠString ?): ĠTask < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot : ĠList < String > Ġ= Ġfolder Id ?. let Ġ{ ĠlistOf ( it ) Ġ} Ġ?: ĠlistOf (" root ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Parents ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MimeType (" text / plain ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( fileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle File Ġ= Ġm Drive Service . files (). create ( metadata ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIOException (" Null Ġresult Ġwhen Ġrequesting Ġfile Ġcreation .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle File . id ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Text File ( fileName : ĠString ?, Ġcontent : ĠString ?, Ġfolder Id : ĠString ?): ĠTask < Google Drive File Holder > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot : ĠList < String > Ġ= Ġfolder Id ?. let Ġ{ ĠlistOf ( it ) Ġ} Ġ?: ĠlistOf (" root ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Parents ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MimeType (" text / plain ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( fileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Stream Ġ= ĠByteArray Content . fromString (" text / plain ", Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle File Ġ= Ġm Drive Service . files (). create ( metadata , Ġcontent Stream ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIOException (" Null Ġresult Ġwhen Ġrequesting Ġfile Ġcreation .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder Ġ= ĠGoogle Drive File Holder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġgoogle File . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Text File If NotExist ( fileName : ĠString , Ġcontent : ĠString ?, Ġfolder Id : ĠString ?): ĠTask < Google Drive File Holder > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder Ġ= ĠGoogle Drive File Holder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Drive Service . files (). list () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Q (" mime Type Ġ= Ġ' text / plain ' Ġand Ġname Ġ= Ġ'$ fileName ' Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Spaces (" app Data Folder ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġresult . files [ 0 ]. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ call Ġgoogle Drive File Holder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot : ĠList < String > Ġ= Ġfolder Id ?. let Ġ{ ĠlistOf ( it ) Ġ} Ġ?: ĠlistOf (" root ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Parents ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MimeType (" text / plain ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( fileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Stream Ġ= ĠByteArray Content . fromString (" text / plain ", Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle File Ġ= Ġm Drive Service . files (). create ( metadata , Ġcontent Stream ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIOException (" Null Ġresult Ġwhen Ġrequesting Ġfile Ġcreation .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġgoogle File . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ call Ġgoogle Drive File Holder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Folder ( folder Name : ĠString ?, Ġfolder Id : ĠString ?): ĠTask < Google Drive File Holder > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder Ġ= ĠGoogle Drive File Holder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot : ĠList < String > Ġ= Ġfolder Id ?. let Ġ{ ĠlistOf ( it ) Ġ} Ġ?: ĠlistOf (" root ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Parents ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MimeType ( Drive Folder . MIME _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( folder Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle File Ġ= Ġm Drive Service . files (). create ( metadata ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIOException (" Null Ġresult Ġwhen Ġrequesting Ġfile Ġcreation .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġgoogle File . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Folder If NotExist ( folder Name : ĠString , Ġparent Folder Id : ĠString ?): ĠTask < Google Drive File Holder > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder Ġ= ĠGoogle Drive File Holder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Drive Service . files (). list () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Q (" mime Type Ġ= Ġ'" Ġ+ ĠDrive Folder . MIME _ TYPE Ġ+ Ġ"' Ġand Ġname Ġ= Ġ'" Ġ+ Ġfolder Name Ġ+ Ġ"' Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Spaces (" app Data Folder ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġresult . files [ 0 ]. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . name Ġ= Ġresult . files [ 0 ]. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// google Drive File Holder . set Modified Time ( result . get Files (). get ( 0 ). get Created Time (). getValue ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// google Drive File Holder . setSize ( result . get Files (). get ( 0 ). getSize ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġresult . files [ 0 ]. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ call Ġgoogle Drive File Holder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" create Folder If NotExist : Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot : ĠList < String > Ġ= Ġparent Folder Id ?. let Ġ{ ĠlistOf ( it ) Ġ} Ġ?: ĠlistOf (" root ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Parents ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MimeType ( Drive Folder . MIME _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( folder Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle File Ġ= Ġm Drive Service . files (). create ( metadata ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIOException (" Null Ġresult Ġwhen Ġrequesting Ġfile Ġcreation .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġgoogle File . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ call Ġgoogle Drive File Holder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen s Ġthe Ġfile Ġidentified Ġby Ġ` file Id ` Ġand Ġreturns Ġa Ġ[ Pair ] Ġof Ġits Ġname Ġand ĊĠĠĠĠ Ġ* Ġcontents . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠreadFile ( file Id : ĠString ?): ĠTask < Pair < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġmetadata Ġas Ġa ĠFile Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġm Drive Service . files ()[ file Id ]. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġmetadata . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . files ()[ file Id ]. execute Media As InputStream (). use Ġ{ Ġ` is ` Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedReader ( InputStream Reader (` is ` )). use Ġ{ Ġreader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( reader . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontents Ġ= ĠstringBuilder . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ call ĠPair . create ( name , Ġcontents ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Folder File ( file Id : ĠString ?): ĠTask < Void ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġmetadata Ġas Ġa ĠFile Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . files (). delete ( file Id ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupload File ( google D ive File : ĠFile ?, Ġcontent : ĠAbstract InputStream Content ?): ĠTask < Google Drive File Holder > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġmetadata Ġas Ġa ĠFile Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Meta Ġ= Ġm Drive Service . files (). create ( google D ive File , Ġcontent ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder Ġ= ĠGoogle Drive File Holder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġfile Meta . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . name Ġ= Ġfile Meta . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupload File ( local File : Ġjava . io . File , ĠmimeType : ĠString ?, Ġfolder Id : ĠString ?): ĠTask < Google Drive File Holder > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġmetadata Ġas Ġa ĠFile Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot : ĠList < String > Ġ= Ġfolder Id ?. let Ġ{ ĠlistOf ( it ) Ġ} Ġ?: ĠlistOf (" root ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Parents ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MimeType ( mime Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( local File . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Content Ġ= ĠFile Content ( mime Type , Ġlocal File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Meta Ġ= Ġm Drive Service . files (). create ( metadata , Ġfile Content ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder Ġ= ĠGoogle Drive File Holder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġfile Meta . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . name Ġ= Ġfile Meta . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Folder ( folder Name : ĠString ): ĠTask < List < Google Drive File Holder >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder List : ĠMutable List < Google Drive File Holder > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRet rive Ġthe Ġmetadata Ġas Ġa ĠFile Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Drive Service . files (). list () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Q (" mime Type Ġ= Ġ'" Ġ+ ĠDrive Folder . MIME _ TYPE Ġ+ Ġ"' Ġand Ġname Ġ= Ġ'" Ġ+ Ġfolder Name Ġ+ Ġ"' Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Spaces (" app Data Folder ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġresult . files . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder Ġ= ĠGoogle Drive File Holder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġresult . files [ i ]. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . name Ġ= Ġresult . files [ i ]. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder List . add ( google Drive File Holder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder List ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch File ( fileName : ĠString , ĠmimeType : ĠString ): ĠTask < List < Google Drive File Holder >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder List : ĠMutable List < Google Drive File Holder > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRet rive Ġthe Ġmetadata Ġas Ġa ĠFile Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Drive Service . files (). list () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Q (" name Ġ= Ġ'$ fileName ' Ġand ĠmimeType Ġ=' $ mime Type '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Spaces (" app Data Folder ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Fields (" files ( id , Ġname , size , created Time , modified Time , star red )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġresult . files . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder Ġ= ĠGoogle Drive File Holder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġresult . files [ i ]. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . name Ġ= Ġresult . files [ i ]. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . modified Time Ġ= Ġresult . files [ i ]. modified Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . size Ġ= Ġresult . files [ i ]. getSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder List . add ( google Drive File Holder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder List ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdownload File ( file Save Location : Ġjava . io . File ?, Ġfile Id : ĠString ?): ĠTask < Void ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġmetadata Ġas Ġa ĠFile Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream : ĠOutputStream Ġ= ĠFileOutputStream ( file Save Location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . files ()[ file Id ]. execute Media And Download To ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdownload File ( file Id : ĠString ?): ĠTask < InputStream > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ Ġm Drive Service . files ()[ file Id ]. execute Media As InputStream () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexport File ( file Save Location : Ġjava . io . File ?, Ġfile Id : ĠString ?, ĠmimeType : ĠString ?): ĠTask < Void ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġmetadata Ġas Ġa ĠFile Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream : ĠOutputStream Ġ= ĠFileOutputStream ( file Save Location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . files (). export ( file Id , ĠmimeType ). execute Media And Download To ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġthe Ġfile Ġidentified Ġby Ġ` file Id ` Ġwith Ġthe Ġgiven Ġ` name ` Ġand Ġ` content `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave File ( file Id : ĠString ?, Ġname : ĠString ?, Ġcontent : ĠString ?): ĠTask < Void ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa ĠFile Ġcontaining Ġany Ġmetadata Ġchanges . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile (). setName ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConvert Ġcontent Ġto Ġan ĠAbstract InputStream Content Ġinstance . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Stream Ġ= ĠByteArray Content . fromString (" text / plain ", Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġmetadata Ġand Ġcontents . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . files (). update ( file Id , Ġmetadata , Ġcontent Stream ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġ[ FileList ] Ġcontaining Ġall Ġthe Ġvisible Ġfiles Ġin Ġthe Ġuser 's ĠMy ĠDrive . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġreturned Ġlist Ġwill Ġonly Ġcontain Ġfiles Ġvisible Ġto Ġthis Ġapp , Ġi . e . Ġthose Ġwhich Ġwere ĊĠĠĠĠ Ġ* Ġcreated Ġby Ġthis Ġapp . ĠTo Ġperform Ġoperations Ġon Ġfiles Ġnot Ġcreated Ġby Ġthe Ġapp , Ġthe Ġproject Ġmust ĊĠĠĠĠ Ġ* Ġrequest ĠDrive ĠFull ĠScope Ġin Ġthe Ġ[ Google Ċ Ġ* ĠDeveloper 's ĠConsole ]( https :// play . google . com / apps / publish ) Ġand Ġbe Ġsubmitted Ġto ĠGoogle Ġfor Ġverification . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġquery Files (): ĠTask < List < Google Drive File Holder >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder List : ĠMutable List < Google Drive File Holder > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Drive Service . files (). list (). set Fields (" files ( id , Ġname , size , created Time , modified Time , star red , mime Type ) "). set Spaces (" app Data Folder "). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġresult . files . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder Ġ= ĠGoogle Drive File Holder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġresult . files [ i ]. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . name Ġ= Ġresult . files [ i ]. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files [ i ]. getSize () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . size Ġ= Ġresult . files [ i ]. getSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files [ i ]. modified Time Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . modified Time Ġ= Ġresult . files [ i ]. modified Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files [ i ]. created Time Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . created Time Ġ= Ġresult . files [ i ]. created Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files [ i ]. star red Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . star red Ġ= Ġresult . files [ i ]. star red ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files [ i ]. mime Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . mime Type Ġ= Ġresult . files [ i ]. mime Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder List . add ( google Drive File Holder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder List ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġquery Files ( folder Id : ĠString ?): ĠTask < List < Google Drive File Holder >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder List : ĠMutable List < Google Drive File Holder > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparent Ġ= Ġ" root " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( folder Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġfolder Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Drive Service . files (). list (). set Q ("' $ parent ' Ġin Ġparents "). set Fields (" files ( id , Ġname , size , created Time , modified Time , star red , mime Type ) "). set Spaces (" app Data Folder "). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġresult . files . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle Drive File Holder Ġ= ĠGoogle Drive File Holder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . id Ġ= Ġresult . files [ i ]. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . name Ġ= Ġresult . files [ i ]. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files [ i ]. getSize () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . size Ġ= Ġresult . files [ i ]. getSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files [ i ]. modified Time Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . modified Time Ġ= Ġresult . files [ i ]. modified Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files [ i ]. created Time Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . created Time Ġ= Ġresult . files [ i ]. created Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files [ i ]. star red Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . star red Ġ= Ġresult . files [ i ]. star red ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . files [ i ]. mime Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder . mime Type Ġ= Ġresult . files [ i ]. mime Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder List . add ( google Drive File Holder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Drive File Holder List ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġ[ Intent ] Ġfor Ġopening Ġthe ĠStorage ĠAccess ĠFramework Ġfile Ġpicker . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate File Picker Intent (): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ OPEN _ DOCUMENT ) ĊĠĠĠĠĠĠĠ Ġintent . add Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen s Ġthe Ġfile Ġat Ġthe Ġ` uri ` Ġreturned Ġby Ġa ĠStorage ĠAccess ĠFramework Ġ[ Intent ] ĊĠĠĠĠ Ġ* Ġcreated Ġby Ġ[. create File Picker Intent ] Ġusing Ġthe Ġgiven Ġ` content Resolver `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen File Using Storage Access Framework ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver : ĠContent Resolver , Ġuri : ĠUri ?): ĠTask < Pair < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor , Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġdocument 's Ġdisplay Ġname Ġfrom Ġits Ġmetadata . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġname : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . query ( uri !! , Ġnull , Ġnull , Ġnull , Ġnull ). use Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġif Ġ( cursor Ġ!= Ġnull Ġ&& Ġcursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Index Ġ= Ġcursor . getColumnIndex ( Open able Columns . DISPLAY _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( name Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Empty Ġcursor Ġreturned Ġfor Ġfile .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRead Ġthe Ġdocument 's Ġcontents Ġas Ġa ĠString . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcontent : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . open InputStream ( uri ). use Ġ{ Ġ` is ` Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedReader ( InputStream Reader (` is ` )). use Ġ{ Ġreader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( reader . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠstringBuilder . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair . create ( name , Ġcontent ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ AUDIO Ġ= Ġ" application / vnd . google - apps . audio " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ DOCS Ġ= Ġ" application / vnd . google - apps . document " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ DRAW ING Ġ= Ġ" application / vnd . google - apps . drawing " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ DRIVE _ FILE Ġ= Ġ" application / vnd . google - apps . file " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ DRIVE _ FOLDER Ġ= ĠDrive Folder . MIME _ TYPE ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ FOR MS Ġ= Ġ" application / vnd . google - apps . form " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ F US ION _ TABLE S Ġ= Ġ" application / vnd . google - apps . fusion table " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ MY _ MA PS Ġ= Ġ" application / vnd . google - apps . map " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ PH OTO Ġ= Ġ" application / vnd . google - apps . photo " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ SL ID ES Ġ= Ġ" application / vnd . google - apps . presentation " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ APPS _ SCRIP TS Ġ= Ġ" application / vnd . google - apps . script " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ S ITES Ġ= Ġ" application / vnd . google - apps . site " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ GOOGLE _ SHE ETS Ġ= Ġ" application / vnd . google - apps . spreadsheet " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ UNKNOWN Ġ= Ġ" application / vnd . google - apps . unknown " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ VIDEO Ġ= Ġ" application / vnd . google - apps . video " ĊĠĠĠĠĠĠĠ Ġvar ĠTYPE _ 3 _ RD _ PAR TY _ SHORT CUT Ġ= Ġ" application / vnd . google - apps . drive - sdk " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ HTML Ġ= Ġ" text / html " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ HTML _ ZIP PED Ġ= Ġ" application / zip " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ PLAIN _ TEXT Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ RIC H _ TEXT Ġ= Ġ" application / rtf " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ OPEN _ OFF ICE _ DOC Ġ= Ġ" application / vnd . oasis . opend ocument . text " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ PDF Ġ= Ġ" application / pdf " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ MS _ WORD _ DOCUMENT Ġ= Ġ" application / vnd . open xm lform ats - off iced ocument . word processing ml . document " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ EP UB Ġ= Ġ" application / ep ub + zip " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ MS _ EX CEL Ġ= Ġ" application / vnd . open xm lform ats - off iced ocument . spreadsheet ml . sheet " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ OPEN _ OFF ICE _ SHE ET Ġ= Ġ" application / x - vnd . oasis . opend ocument . spreadsheet " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ CSV Ġ= Ġ" text / csv " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ T SV Ġ= Ġ" text / tab - separated - values " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ JPEG Ġ= Ġ" application / zip " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ PNG Ġ= Ġ" image / png " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ SVG Ġ= Ġ" image / svg + xml " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ MS _ POWER _ POINT Ġ= Ġ" application / vnd . open xm lform ats - off iced ocument . presentation ml . presentation " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ OPEN _ OFF ICE _ PRESENT ATION Ġ= Ġ" application / vnd . oasis . opend ocument . presentation " ĊĠĠĠĠĠĠĠ Ġvar ĠEX PORT _ TYPE _ JSON Ġ= Ġ" application / vnd . google - apps . script + json " ĊĠĠĠĠĠĠĠ Ġfun Ġget Google AppData Drive Service ( context : ĠContext ?, Ġaccount : ĠGoogle SignIn Account , ĠappName : ĠString ?): ĠDrive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠGoogle Account Credential . using OAuth 2 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , Ġset Of ( Drive Scopes . DRIVE _ APP DATA )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredential . selected Account Ġ= Ġaccount . account ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDrive . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Http . new Compatible Transport (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGson Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Application Name ( appName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Drive Service Helper " ĊĠĠĠ Ġ} Ċ }