package Ġcom . fl x rs . d ank chat . login Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . webkit .* Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġcom . fl x rs . d ank chat . R Ċ import Ġcom . fl x rs . d ank chat . data . api . Api Manager Ċ import Ġcom . fl x rs . d ank chat . data . api . dto . Validate User Dto Ċ import Ġcom . fl x rs . d ank chat . databinding . Login Fragment Binding Ċ import Ġcom . fl x rs . d ank chat . main . Main Fragment Ċ import Ġcom . fl x rs . d ank chat . preferences . D ank Chat Preference Store Ċ import Ġcom . fl x rs . d ank chat . utils . extensions . setup Dark Theme Ċ import Ġcom . fl x rs . d ank chat . utils . extensions . show Long Snackbar Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠLogin Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbinding Ref : ĠLogin Fragment Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġbinding Ref !! ĊĠĠĠ Ġprivate Ġval Ġargs : ĠLogin Fragment Args Ġby Ġnav Args () ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġd ank Chat Preferences : ĠD ank Chat Preference Store ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġapi Manager : ĠApi Manager ĊĊĠĠĠ Ġ@ Suppress Lint (" Set JavaScript Enabled ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ref Ġ= ĠLogin Fragment Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . webview . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( settings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Script Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Support Zoom ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Dark Theme ( resources ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! args . is Re login ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCookie Manager . getInstance (). removeAll Cookies ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Cache ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear FormData () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Client Ġ= ĠTw itch Auth Client () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Url ( Api Manager . LOGIN _ URL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġ( require Activity () Ġas ĠAppCompatActivity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . login Toolbar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠgetString ( R . string . login _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġbinding Ref Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠTw itch Auth Client Ġ: ĠWebView Client () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ SuppressWarnings (" DE PREC ATION ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Received Error ( view : ĠWebView ?, ĠerrorCode : ĠInt , Ġdescription : ĠString ?, Ġfailing Url : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ref ?. root ?. show Long Snackbar (" Error Ġ$ errorCode : Ġ$ description ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġ$ errorCode Ġin ĠWebView : Ġ$ description ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Received Error ( view : ĠWebView ?, Ġrequest : ĠWeb Resource Request ?, Ġerror : ĠWeb Resource Error ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġerror ?. description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġerror ?. errorCode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ref ?. root ?. show Long Snackbar (" Error Ġ$ code : Ġ$ message ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġ$ code Ġin ĠWebView : Ġ$ message ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ SuppressWarnings (" DE PREC ATION ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Override Url Loading ( view : ĠWebView ?, Ġurl : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl String Ġ= Ġurl Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġurl String . to Uri (). fragment Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse OAuth Token ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . N ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Override Url Loading ( view : ĠWebView ?, Ġrequest : ĠWeb Resource Request ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġrequest ?. url ?. fragment Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse OAuth Token ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse OAuth Token ( fragment : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment . startsWith (" access _ token =" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġfragment . substring After (" access _ token =" ). substring Before ("& scope =") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġapi Manager . validate User ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccessful Ġ= Ġsave Login Details ( token , Ġresult ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( find Nav Controller ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Back Stack Entry ?. saved State Handle ?. set ( Main Fragment . LOGIN _ REQUEST _ KEY , Ġsuccessful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate Up () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsave Login Details ( o Auth : ĠString , Ġvalidate Dto : ĠValidate User Dto ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Dto Ġ== Ġnull Ġ|| Ġvalidate Dto . login . isBlank () Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ank Chat Preferences . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo Auth Key Ġ= Ġ" oauth :$ o Auth " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= Ġvalidate Dto . login . lowercase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId String Ġ= Ġvalidate Dto . userId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠLogin Fragment :: class . java . simple Name ĊĠĠĠ Ġ} Ċ }