package Ġcom . v va . android openc bt . gd rive feature Ċ Ċ 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 . 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 . model . File Ċ import Ġcom . google . api . services . drive . model . FileList Ċ import Ġkotlinx . coroutines . suspend C ancellable Coroutine Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Executors Ċ Ċ class ĠDrive Service Helper Ġprivate Ġconstructor ( private Ġval Ġm Drive Service : ĠDrive ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Executor Ġ= ĠExec utors . new Single Thread Executor () ĊĊĠĠĠ Ġfun Ġcreate File ( parents : ĠString ?, ĠmimeType : ĠString , ĠfileName : ĠString ): ĠTask < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Parents ( Collections . singletonList ( parents )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MimeType ( mime Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( fileName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle File Ġ= Ġm Drive Service . files (). create ( metadata ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIOException (" Null Ġresult Ġwhen Ġrequesting Ġfile Ġcreation ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle File . id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠreadFile ( file Id : ĠString ): ĠTask < Pair < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġm Drive Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( file Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġmetadata . name ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . files (). get ( file Id ). execute Media As InputStream (). use Ġ{ ĠinputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedReader ( InputStream Reader ( inputStream )). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair < String , ĠString >( name , Ġit . read Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Folder ( parents : ĠList < String >, Ġname : ĠString ): ĠTask < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Parents ( parents ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MimeType (" application / vnd . google - apps . folder ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . Files (). create ( metadata ). execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Folder Exist ( name : ĠString ): ĠTask < FileList > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. list () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Q (" name ='$ name ' Ġand ĠmimeType Ġ= Ġ' application / vnd . google - apps . folder ' "). execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave File ( file Id : ĠString , Ġname : ĠString , Ġcontent : ĠString , ĠmimeType : ĠString ): ĠTask < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Stream Ġ= ĠByteArray Content . fromString ( mime Type , Ġcontent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . files (). update ( file Id , Ġmetadata , Ġcontent Stream ). execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupload File ( parents : ĠList < String >, ĠfileName : ĠString , ĠfilePath : ĠString ): ĠTask < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Parents ( parents ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setName ( fileName ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlocal File Ġ= Ġjava . io . File ( filePath ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠFile Content (" application / octet - stream ", Ġlocal File ) ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( metadata , Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Fields (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġquery Files ( folder Id : ĠString ): ĠTask < FileList > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( m Executor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drive Service . files (). list () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Q (" parents Ġin Ġ'$ folder Id '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Fields (" files ( id , Ġname , Ġcreated Time , Ġsize )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE : ĠDrive Service Helper ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( credential : ĠGoogle Account Credential ): ĠDrive Service Helper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINSTANCE Ġ?: ĠDrive Service Helper ( get Drive ( credential )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Drive ( credential : ĠGoogle Account Credential ): ĠDrive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDrive . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Http . new Compatible Transport (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGson Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). set Application Name (" Open CB T ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }