package Ġcom . my mik em iller . y tag gregator Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Toolbar Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . ListView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . my mik em iller . y tag gregator . yt . YouTube API Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . os . Handler Ċ import Ġandroid . text . InputType Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . EditText Ċ import Ġcom . google . android . gms . auth . api . Auth Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Account Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Options Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Result Ċ import Ġcom . google . android . gms . common . Scopes Ċ import Ġcom . google . android . gms . common . api . Google ApiClient Ċ import Ġcom . google . android . gms . common . api . Scope Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġm ik em Ġon Ġ 1 0 / 1 4 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠPlaylist Chooser Activity : ĠAppCompatActivity (), ĊĠĠĠĠĠĠĠ ĠGoogle ApiClient . Connection Callbacks Ġ{ ĊĊĊĠĠĠ Ġlateinit Ġvar Ġm ListView : ĠListView ĊĠĠĠ Ġval Ġm ListView Items : ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Google ApiClient : ĠGoogle ApiClient ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ playlist _ cho oser ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġup Ġthe Ġaction Ġbar ĊĠĠĠĠĠĠĠ Ġval Ġmy Toolbar Ġ= ĠfindViewById < View >( R . id . playlist _ cho oser _ toolbar ) Ġas ĠToolbar ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( my Toolbar ) ĊĊĠĠĠĠĠĠĠ Ġm ListView Ġ= ĠfindViewById < ListView >( R . id . list View ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠArray Adapter < String >( this , Ġandroid . R . layout . simple _ list _ item _ 1 , Ġm ListView Items ) ĊĠĠĠĠĠĠĠ Ġm ListView . setAdapter ( adapter ) ĊĊĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĊĠĠĠĠĠĠĠ Ġm ListView . on ItemClickListener Ġ= Ġobject : ĠAdapter View . On ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Click ( l : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaylist Title Ġ= Ġm ListView . adapter . getItem ( position ) Ġas ĠString ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch MainActivity ( playlist Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfigure Ġsign - in Ġto Ġrequest Ġyoutube Ġaccess ĊĠĠĠĠĠĠĠ Ġval Ġg so Ġ= ĠGoogle SignIn Options . Builder ( Google SignIn Options . DEFAULT _ SIGN _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Scopes ( Scope ( Scopes . PLUS _ LOGIN )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Scopes ( Scope ( YouTube API . Y OUT UBE _ SCOPE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Email () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġa ĠGoogle ApiClient Ġwith Ġaccess Ġto Ġthe ĠGoogle ĠSign - In ĠAPI Ġand Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġoptions Ġspecified Ġby Ġg so . ĊĠĠĠĠĠĠĠ Ġm Google ApiClient Ġ= ĠGoogle ApiClient . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Api ( Auth . GOOGLE _ SIGN _ IN _ API , Ġg so ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Connection Callbacks ( this ). build () ĊĠĠĠĠĠĠĠ Ġm Google ApiClient . connect () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( YouTube API . is Authenticated ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow User Play lists () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġmenu Ġitems Ġfor Ġuse Ġin Ġthe Ġaction Ġbar ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġmenu ; Ġthis Ġadds Ġitems Ġto Ġthe Ġaction Ġbar Ġif Ġit Ġis Ġpresent . ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . show _ my _ play lists _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ; ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġp resses Ġon Ġthe Ġaction Ġbar Ġitems ĊĠĠĠĠĠĠĠ Ġif Ġ( item . getItem Id () Ġ== ĠR . id . action _ show _ my _ play lists ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsign In () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ; ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . getItem Id () Ġ== ĠR . id . action _ add _ playlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle (" Playlist ĠName ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠEditText ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSpecify Ġthe Ġtype Ġof Ġinput Ġexpected ; Ġthis , Ġfor Ġexample , Ġsets Ġthe Ġinput Ġas Ġa Ġpassword , Ġand Ġwill Ġmask Ġthe Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . input Type Ġ= ĠInput Type . TYPE _ CLASS _ TEXT Ġor ĠInput Type . TYPE _ TEXT _ FLAG _ CAP _ WORDS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setView ( input ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe Ġbuttons ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Negative Button (" Cancel ", Ġ{ Ġdialog , Ġwhich Ġ-> Ġdialog . cancel () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Positive Button (" OK ", Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch MainActivity ( input . text . toString (). trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPop Ġup Ġthe Ġkeyboard ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠHandler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmgr Ġ= Ġget System Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmgr . show Soft Input ( input , ĠInput Method Manager . SHOW _ IMP LICIT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLaunch Ġthe Ġmain Ġactivity ĊĠĠĠ Ġfun Ġlaunch MainActivity ( playlist Title : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmain Intent Ġ= ĠIntent ( this , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠ Ġmain Intent . add Flags ( Intent . FLAG _ ACTIVITY _ RE ORDER _ TO _ FRONT ) ĊĠĠĠĠĠĠĠ Ġmain Intent . putExtra ( getString ( R . string . extra Launch Playlist Title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist Title ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( main Intent ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Connected ( p 0 : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDo ĠNothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Connection Sus pended ( p 0 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDo ĠNothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsign In () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! YouTube API . is Authenticated ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsign In Intent Ġ= ĠAuth . Google SignIn Api . get SignIn Intent ( m Google ApiClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( signIn Intent , ĠPreferences Activity . RC _ SIGN _ IN ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġdon 't Ġcall Ġupdate UI Ġhere Ġbecause Ġwe Ġneed Ġto Ġwait Ġfor Ġthe Ġactivity 's ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresult Ġto Ġsee Ġif Ġwe Ġactually Ġsigned Ġin ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow User Play lists () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠThis Ġhappens Ġas Ġa Ġresult Ġof Ġsigning Ġin Ġfor Ġthe Ġfirst Ġtime Ġby Ġselecting Ġa Ġuser ĊĠĠĠ Ġfun Ġhandle SignIn Result ( result : ĠGoogle SignIn Result ) Ġ: ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( Preferences Activity . TAG , Ġ" handle SignIn Result : Ġ" Ġ+ Ġresult . is Success ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( result . is Success ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Signed Ġin Ġsuccessfully ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġaccount Ġfrom Ġthe Ġsign Ġin Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount : ĠGoogle SignIn Account ? Ġ= Ġresult . signIn Account ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġm YouTube API Ġbecause Ġwe 're Ġnow Ġauthenticated Ġand Ġcan Ġcall Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġauthenticated Ġcalls ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠYouTube API . authenticate ( this , Ġaccount . account !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow User Play lists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Failed Ġto Ġsign Ġin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġm YouTube Api Ġso Ġwe Ġdon 't Ġtry Ġto Ġuse Ġauthenticated Ġfunctions ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYouTube API . un Authenticate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠPreferences Activity . RC _ SIGN _ IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠResult Ġreturned Ġfrom Ġlaunch ing Ġthe ĠIntent Ġfrom ĠGoogle SignIn Api . get SignIn Intent (... ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠGoogle SignIn Result Ġ= ĠAuth . Google SignIn Api . get SignIn Result From Intent ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle SignIn Result ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow User Play lists () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( YouTube API . is Authenticated ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYouTube API . getUser Playlist Titles ({ Ġplaylist Titles Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( playlist Title Ġin Ġplaylist Titles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ListView Items . add ( playlist Title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( m ListView . adapter Ġas ĠArray Adapter < String >). notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }