package Ġcom . kir kb ush man . sample app . activities Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . kir kb ush man . auth . Red dit Auth Ċ import Ġcom . kir kb ush man . auth . managers . Shared Prefs Storage Manager Ċ import Ġcom . kir kb ush man . auth . models . bear ers . Token Bearer Ċ import Ġcom . kir kb ush man . auth . models . creds . Application Credentials Ċ import Ġcom . kir kb ush man . auth . models . creds . Script Credentials Ċ import Ġcom . kir kb ush man . auth . models . creds . User less Credentials Ċ import Ġcom . kir kb ush man . auth . models . enums . Auth Type Ċ import Ġcom . kir kb ush man . auth . utils . Utils Ċ import Ġcom . kir kb ush man . sample app . R Ċ import Ġcom . kir kb ush man . sample app . databinding . Activity Info Binding Ċ import Ġcom . kir kb ush man . sample app . module . Test Credentials Ċ import Ġcom . kir kb ush man . sample app . utils . Do Async Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . Exception Ċ Ċ @ Android EntryPoint Ċ class ĠToken Info Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġcredentials : ĠTest Credentials ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġprefs : ĠShared Prefs Storage Manager ĊĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠActivity Info Binding ĊĊĠĠĠ Ġprivate Ġvar Ġbe arer : ĠToken Bearer ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġrev oked Error Dialog Ġby Ġlazy Ġ{ ĊĊĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Action Ġnot Ġavailable !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" The Ġtoken Ġwas Ġrev oked , Ġand Ġno Ġaction Ġcan Ġbe Ġdone Ġupon Ġit Ġanymore .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Ok ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Info Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Show Home Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠRed dit Auth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. Saved ( prefs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. retrieve ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Credentials Ġ= Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Type . INST ALLED _ APP Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Credentials ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Ġ= Ġcredentials . clientId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredirect Url Ġ= Ġcredentials . redirect Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Type . USER LESS Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser less Credentials ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Ġ= Ġcredentials . clientId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdeviceId Ġ= ĠUtils . getDevice UUID () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Type . SCRIPT Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScript Credentials ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Ġ= Ġcredentials . script ClientId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Secret Ġ= Ġcredentials . script Client Secret , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġcredentials . username , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġcredentials . password ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Found Ġ= Ġ{ Ġ_, Ġbe arer Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . bearer Ġ= Ġbe arer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Miss Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbind Token ( bearer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bearer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ Ġon Back Pressed (); Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ renew Ġ-> Ġ{ Ġtoken Renew (); Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ revoke Ġ-> Ġ{ Ġtoken Re voke (); Ġtrue Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Token ( bearer : ĠToken Bearer ?, Ġmessage : ĠString ? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( message Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info Message . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info Message . text Ġ= Ġmessage ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info Message . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġis Aut hed Text Ġ= Ġ" Is Aut hed : Ġ${ bearer ?. is Aut hed () Ġ?: Ġfalse }" ĊĠĠĠĠĠĠĠ Ġbinding . token Info Is Aut hed . text Ġ= Ġis Aut hed Text ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Type Text Ġ= Ġ" Auth Type : Ġ${ bearer ?. get Auth Type () Ġ?: Ġ" NONE "} " ĊĠĠĠĠĠĠĠ Ġbinding . token Info Auth Type . text Ġ= Ġauth Type Text ĊĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġbe arer ?. getToken () ĊĠĠĠĠĠĠĠ Ġif Ġ( token Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠaccessToken Text Ġ= Ġ" AccessToken : Ġ${ token . accessToken }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info AccessToken . text Ġ= ĠaccessToken Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrefresh Token Text Ġ= Ġ" RefreshToken : Ġ${ token . refresh Token }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info RefreshToken . text Ġ= Ġrefresh Token Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Type Text Ġ= Ġ" TokenType : Ġ${ token . token Type }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info TokenType . text Ġ= Ġtoken Type Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpires In Text Ġ= Ġ" Expires In : Ġ${ token . expiration Time }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info Expires In . text Ġ= Ġexpires In Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Time Text Ġ= Ġ" Created Time : Ġ${ token . created Time }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info Created Time . text Ġ= Ġcreated Time Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscopes Text Ġ= Ġ" Scopes : Ġ${ token . scopes }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info Scopes . text Ġ= Ġscopes Text ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info AccessToken . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info RefreshToken . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info TokenType . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info Expires In . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info Created Time . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . token Info Scopes . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoken Renew () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bearer !!. is Rev oked ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrev oked Error Dialog . show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexception : ĠException ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠDo Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Work Ġ= Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer !!. renew Token () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Post Ġ= Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġif Ġ( exception Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A Ġproblem Ġoccured Ġwhile Ġrefresh ing Ġthe Ġtoken , Ġwith Ġexception : Ġ${ exception !!. message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSimpleDateFormat (" dd - MM - yyyy ĠHH : mm ", ĠLocale . getDefault ()). format ( Date ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ bearer !!. get AccessToken ()}, ĠRef reshed Ġ$ now " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Token ( bearer , Ġmessage ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Token Ġref reshed Ġsuccessfully ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoken Re voke () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġexception : ĠException ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bearer !!. is Rev oked ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrev oked Error Dialog . show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠDo Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Work Ġ= Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer !!. revoke Token () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Post Ġ= Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġif Ġ( exception Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A Ġproblem Ġhas Ġoccurred Ġwhile Ġrev oking Ġthe Ġtoken , Ġwith Ġmessage : Ġ${ exception !!. message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSimpleDateFormat (" dd - MM - yyyy ĠHH : mm ", ĠLocale . getDefault ()). format ( Date ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Token Ġwas Ġrev oked Ġ$ now " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Token ( bearer , Ġmessage ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Token Ġrev oked Ġsuccessfully ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ