package Ġcom . bot t ler ocket stud ios . br architecture . ui . auth Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . bot t ler ocket stud ios . br architecture . R Ċ import Ġcom . bot t ler ocket stud ios . br architecture . data . build config . Build Config Provider Ċ import Ġcom . bot t ler ocket stud ios . br architecture . data . model . Credential Model Ċ import Ġcom . bot t ler ocket stud ios . br architecture . data . repository . Bit bucket Repository Ċ import Ġcom . bot t ler ocket stud ios . br architecture . infrastructure . coroutine . Dispatcher Provider Ċ import Ġcom . bot t ler ocket stud ios . br architecture . infrastructure . toast . To aster Ċ import Ġcom . bot t ler ocket stud ios . br architecture . navigation . External Navigation Event Ċ import Ġcom . bot t ler ocket stud ios . br architecture . navigation . Navigation Event Ċ import Ġcom . bot t ler ocket stud ios . br architecture . ui . Base ViewModel Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠLogin ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġapp : ĠApplication , ĊĠĠĠ Ġprivate Ġval Ġrepo : ĠBit bucket Repository , ĊĠĠĠ Ġbuild Config Provider : ĠBuild Config Provider , ĊĠĠĠ Ġprivate Ġval Ġto aster : ĠTo aster , ĊĠĠĠ Ġprivate Ġval Ġdispatcher Provider : ĠDispatcher Provider Ċ ) Ġ: ĊĠĠĠ ĠBase ViewModel ( app ) Ġ{ ĊĊĠĠĠ Ġ// ĠTwo Ġway Ġdatab ind ing ĊĠĠĠ Ġval Ġemail Ġ= ĠMutable State Flow ("") ĊĠĠĠ Ġval Ġpassword Ġ= ĠMutable State Flow ("") ĊĊĠĠĠ Ġ// ĠOne Ġway Ġdatab ind ing ĊĠĠĠ Ġval Ġlogin Enabled : ĠState Flow < Boolean > Ġ= Ġcombine ( email , Ġpassword ) Ġ{ Ġ( email , Ġpassword ) Ġ-> ĊĠĠĠĠĠĠĠ ĠCredential Model ( email , Ġpassword ). valid ĊĠĠĠ Ġ}. ground State ( false ) ĊĠĠĠ Ġval Ġdev Options Enabled Ġ= Ġbuild Config Provider . isDebug Or Internal Build ĊĊĠĠĠ Ġfun Ġon Login Clicked () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . v ("[ on Login Clicked ]") ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( dispatcher Provider . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreds Ġ= ĠCredential Model ( email . value , Ġpassword . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreds . valid Credentials ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthenticated Ġ= Ġrepo . authenticate ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠImprove Ġerror Ġmessaging Ġ( update Ġtext Ġinputs , Ġshow Ġdialog Ġor Ġsn ackbar , Ġetc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! authenticated Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( dispatcher Provider . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto aster . toast ( R . string . login _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnavigation Event . post Value ( Navigation Event . Action ( R . id . action _ login Fragment _ to _ home Fragment )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠNeed Ġto Ġrepresent Ġinvalid Ġcredential Ġformat Ġerror Ġhere Ġto Ġdifferent iate Ġfrom Ġan Ġactual Ġinvalid Ġlogin Ġattempt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( dispatcher Provider . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto aster . toast ( R . string . login _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Signup Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġexternal Navigation Event . post Value ( External Navigation Event ( Intent ( Intent . ACTION _ VIEW , Ġ" https :// id . atlassian . com / signup ? application = bitbucket ". to Uri ()))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Forgot Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġexternal Navigation Event . post Value ( External Navigation Event ( Intent ( Intent . ACTION _ VIEW , Ġ" https :// id . atlassian . com / login / reset password ? application = bitbucket ". to Uri ()))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Dev Options Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġnavigation Event . post Value ( Navigation Event . Action ( R . id . action _ login Fragment _ to _ dev Options Fragment )) ĊĠĠĠ Ġ} Ċ } Ċ