package Ġcom . example . jb test Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Account Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Client Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Options Ċ import Ġcom . google . android . gms . common . api . Scope Ċ import Ġcom . google . android . gms . tasks . Task Ċ import Ġcom . google . android . gms . tasks . Tasks Ċ import Ġcom . google . api . client . googleapis . extensions . android . gms . auth . Google Account Credential Ċ import Ġcom . google . api . client . http . FileContent Ċ import Ġcom . google . api . client . http . jav an et . Net Http Transport Ċ 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 Ġjava . util .* Ċ import Ġjava . util . concurrent . Callable Ċ import Ġjava . util . concurrent . Executors Ċ Ċ /// ĠService Ġclass Ġfor Ġaccessing ĠGoogle ĠDrive Ġoptions . Ċ class ĠGoogle Drive Service ( private Ġval Ġactivity : ĠActivity , Ġprivate Ġval Ġlistener : ĠListener ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgoogle SignIn Client Ġ: ĠGoogle SignIn Client ĊĠĠĠ Ġprivate Ġval Ġgoogle Account Credential Ġ= ĠGoogle Account Credential . using OAuth 2 ( activity , ĠCollections . singleton ( Drive Scopes . DRIVE _ FILE )) ĊĠĠĠ Ġprivate Ġval Ġdrive Ġ= ĠDrive . Builder ( Net Http Transport (), ĠGson Factory (), Ġgoogle Account Credential ) ĊĠĠĠĠĠĠĠ Ġ. set Application Name ( activity . resources . getString ( R . string . app _ name )). build () ĊĊĠĠĠ Ġ/// ĠExecutor Ġfor Ġfile Ġuploading . ĊĠĠĠ Ġprivate Ġval Ġexecutor Ġ= ĠExec utors . new Single Thread Executor () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsign In Options Ġ= ĠGoogle SignIn Options . Builder ( Google SignIn Options . DEFAULT _ SIGN _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Scopes ( Scope ( Drive Scopes . DRIVE _ FILE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Email () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġgoogle SignIn Client Ġ= ĠGoogle SignIn . getClient ( activity , Ġsign In Options ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ SIGN _ IN Ġ= Ġ 1 0 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// ĠMethod Ġfor Ġhandling Ġresults Ġgot Ġfrom Ġactivities . ĊĠĠĠ Ġpublic Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ SIGN _ IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// ĠStarts ĠGoogle Ġsign Ġin Ġactivity . ĊĠĠĠ Ġpublic Ġfun Ġinit SignIn () Ġ= Ġactivity . startActivity For Result ( google SignIn Client . signIn Intent , ĠREQUEST _ SIGN _ IN ) ĊĊĠĠĠ Ġ/// ĠSign s Ġin Ġto ĠGoogle Ġaccount Ġusing Ġinformation Ġreceived Ġfrom Ġsign Ġin Ġintent . ĊĠĠĠ Ġpublic Ġfun Ġsign In ( data : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠGoogle SignIn . get Signed In Account From Intent ( data ). add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Account Credential ( it ) ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onError ( it , Ġ" Sign Ġin Ġerror ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// ĠUpdates ĠGoogle Ġaccount Ġcredential Ġwith Ġdata Ġfrom Ġprovided ĠGoogle Ġaccount . ĊĠĠĠ Ġprivate Ġfun Ġrefresh Account Credential ( google Account Ġ: ĠGoogle SignIn Account ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgoogle Account Credential . selected Account Ġ= Ġgoogle Account . account ĊĠĠĠĠĠĠĠ Ġlistener . on SignIn ( google Account . email . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// ĠChecks Ġif Ġthe Ġuser Ġis Ġalready Ġlogged Ġin . ĊĠĠĠ Ġpublic Ġfun Ġcheck Login Status () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= ĠGoogle SignIn . getLast Signed In Account ( activity ) ĊĠĠĠĠĠĠĠ Ġval Ġcontains Scope Ġ= Ġaccount ?. gr anted Scopes ?. contains ( Scope ( Drive Scopes . DRIVE _ FILE )) ĊĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull Ġ&& Ġcontains Scope Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Account Credential ( account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// ĠUp loads Ġfile Ġto ĠGoogle ĠDrive . ĊĠĠĠ Ġpublic Ġfun Ġupload File ( filePath Ġ: ĠString , ĠfileName Ġ: ĠString , Ġfolder Id Ġ: ĠString ) Ġ: ĠTask < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTasks . call ( executor , ĠCallable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Info Ġ= ĠFile () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Info . name Ġ= ĠfileName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Info . parents Ġ= ĠCollections . singletonList ( folder Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġjava . io . File ( filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠFile Content (" audio / mpeg ", Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdrive . Files (). create ( fileInfo , Ġcontent ). set Fields (" id , Ġparents "). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . id ĊĠĠĠĠĠĠĠ Ġ}). add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Uploaded () ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onError ( it , Ġ" Upload Ġerror ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }