// Ċ // ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠCouch base , ĠInc ĠAll Ġrights Ġreserved . Ċ // Ċ // ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ // Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ // ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ // Ċ // Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ // Ċ // ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ // Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ // ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ // ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ // Ġlimitations Ġunder Ġthe ĠLicense . Ċ // Ċ package Ġcom . couch base . android . sof ap ix Ċ Ċ import Ġandroid . accounts . Account Ċ import Ġandroid . accounts . Account Authenticator Response Ċ import Ġandroid . accounts . Account Manager Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . app . Progress Dialog Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . widget . Toast Ċ import Ġcom . couch base . android . sof ap ix . app . APP Ċ import Ġcom . couch base . android . sof ap ix . auth . KEY _ FEATURES Ċ import Ġcom . couch base . android . sof ap ix . auth . KEY _ OPTIONS Ċ import Ġcom . couch base . android . sof ap ix . auth . KEY _ TOKEN _ TYPE Ċ import Ġcom . couch base . android . sof ap ix . vm . Login VM Ċ import Ġcom . couch base . android . sof ap ix . vm . VM Factory Ċ import Ġkotlinx . android . synt hetic . main . activity _ main . toolbar Ċ import Ġkotlinx . android . synt hetic . main . content _ login . login Ċ import Ġkotlinx . android . synt hetic . main . content _ login . password Ċ import Ġkotlinx . android . synt hetic . main . content _ login . username Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠLogin Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġvm Factory : ĠVM Factory ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠLogin VM ĊĊĠĠĠ Ġprivate Ġvar Ġresponse : ĠAccount Authenticator Response ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtoken Type : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġrequired Features : ĠArray < out ĠString >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġoptions : ĠBundle ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġprogress Dialog : ĠDialog ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠAPP ?. vm Factory ()?. inject ( this ) ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ login ) ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġintent ĊĠĠĠĠĠĠĠ Ġresponse Ġ= Ġi . get Parcelable Extra ( Account Manager . KEY _ ACCOUNT _ AUTHENT IC ATOR _ RESPONSE ) ĊĠĠĠĠĠĠĠ Ġtoken Type Ġ= Ġi . getString Extra ( KEY _ TOKEN _ TYPE ) ĊĠĠĠĠĠĠĠ Ġrequired Features Ġ= Ġi . getString Array Extra ( KEY _ FEATURES ) ĊĠĠĠĠĠĠĠ Ġoptions Ġ= Ġi . get Bundle Extra ( KEY _ OPTIONS ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , Ġvm Factory ). get ( Login VM :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . error . observe ( this , ĠObserver Ġ{ Ġmsg Ġ-> Ġshow Error ( msg ) Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . account . observe ( this , ĠObserver Ġ{ Ġaccount Ġ-> Ġlogged In ( account ) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġlogin . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . login ( username . text . toString (), Ġpassword . text . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġresponse ĊĠĠĠĠĠĠĠ Ġif Ġ( resp Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp . onError ( Account Manager . ERROR _ CODE _ C ANCE LED , Ġ" c anceled ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error ( msg : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Loading Dialog () ĊĠĠĠĠĠĠĠ Ġusername . setText ("") ĊĠĠĠĠĠĠĠ Ġpassword . setText ("") ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Login Ġfailed : Ġ${ msg }", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlogged In ( account : ĠAccount ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġaccount Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġreply Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġreply . putString ( Account Manager . KEY _ ACCOUNT _ NAME , Ġaccount . name ) ĊĠĠĠĠĠĠĠ Ġreply . putString ( Account Manager . KEY _ ACCOUNT _ TYPE , Ġaccount . type ) ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġresponse ĊĠĠĠĠĠĠĠ Ġif Ġ( resp Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp . on Result ( reply ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhide Loading Dialog () ĊĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Dialog Ġ= ĠProgress Dialog . show ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . just _ a _ moment ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . logging _ in ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Loading Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Dialog ?. dismiss () ĊĠĠĠ Ġ} Ċ } Ċ