package Ġcom . ud acity . project 4 . authentication Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . firebase . ui . auth . Auth UI Ċ import Ġcom . ud acity . project 4 . R Ċ import Ġcom . ud acity . project 4 . location rem inders . Rem inders Activity Ċ import Ġcom . ud acity . project 4 . notifications . create Channel ĊĊ Ċ /** Ċ Ġ* ĠThis Ġclass Ġshould Ġbe Ġthe Ġstarting Ġpoint Ġof Ġthe Ġapp , ĠIt Ġasks Ġthe Ġusers Ġto Ġsign Ġin Ġ/ Ġregister , Ġand Ġredirects Ġthe Ċ Ġ* Ġsigned Ġin Ġusers Ġto Ġthe ĠRem inders Activity . Ċ Ġ*/ Ċ class ĠAuthentication Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogin Button : ĠTextView ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Authentication ViewModel >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ authentication ) ĊĊĠĠĠĠĠĠĠ Ġlogin Button Ġ= ĠfindViewById ( R . id . text view _ login _ button ) ĊĠĠĠĠĠĠĠ Ġlogin Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLaunch Ġsign Ġin Ġflow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch SignIn Flow () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġdone ĠTODO : ĠImplement Ġthe Ġcreate Ġaccount Ġand Ġsign Ġin Ġusing ĠFirebase UI , Ġuse Ġsign Ġin Ġusing Ġemail Ġand Ġsign Ġin Ġusing ĠGoogle ĊĠĠĠĠĠĠĠ Ġ// Ġdone ĠTODO : ĠIf Ġthe Ġuser Ġwas Ġauthenticated , Ġsend Ġhim Ġto ĠRem inders Activity ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġa Ġbonus Ġis Ġto Ġcustomize Ġthe Ġsign Ġin Ġflow Ġto Ġlook Ġnice Ġusing Ġ: ĊĠĠĠĠĠĠĠ Ġ// https :// github . com / firebase / Firebase UI - Android / blob / master / auth / README . md # custom - layout ĊĊĠĠĠĠĠĠĠ Ġ// ĠOb serve Ġthe Ġauthentication Ġstate Ġso Ġwe Ġcan Ġknow Ġif Ġthe Ġuser Ġhas Ġlogged Ġin Ġsuccessfully . ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġuser Ġhas Ġlogged Ġin Ġsuccessfully , Ġbring Ġthem Ġback Ġto Ġthe Ġsettings Ġscreen . ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġuser Ġdid Ġnot Ġlog Ġin Ġsuccessfully , Ġdisplay Ġan Ġerror Ġmessage . ĊĠĠĠĠĠĠĠ ĠviewModel . authentication State . observe ( this , ĠObserver Ġ{ Ġauthentication State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( authentication State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuthentication ViewModel . Authentication State . AUTHENT IC ATED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart ĠRem inders Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠRem inders Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLog . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Authentication Ġstate Ġthat Ġdoesn 't Ġrequire Ġany ĠUI Ġchange Ġ$ authentication State " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġnotification Ġchannel ĊĠĠĠĠĠĠĠ Ġcreate Channel ( application Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Alert ( title : ĠString , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠ Ġbuilder . setTitle ( title ) ĊĠĠĠĠĠĠĠ Ġbuilder . setMessage ( message ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Positive Button ( R . string . button _ ok , Ġnull ) ĊĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch SignIn Flow () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGive Ġusers Ġthe Ġoption Ġto Ġsign Ġin Ġ/ Ġregister Ġwith Ġtheir Ġemail Ġor ĠGoogle Ġaccount . ĠIf Ġusers ĊĠĠĠĠĠĠĠ Ġ// Ġchoose Ġto Ġregister Ġwith Ġtheir Ġemail , Ġthey Ġwill Ġneed Ġto Ġcreate Ġa Ġpassword Ġas Ġwell . ĊĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth UI . Id p Config . Email Builder (). build (), ĠAuth UI . Id p Config . Google Builder (). build () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġand Ġlaunch Ġsign - in Ġintent . ĠWe Ġlisten Ġto Ġthe Ġresponse Ġof Ġthis Ġactivity Ġwith Ġthe ĊĠĠĠĠĠĠĠ Ġ// ĠSIGN _ IN _ RESULT _ CODE Ġcode . ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth UI . getInstance (). create SignIn Intent Builder (). set Available Providers ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproviders ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). build (), ĠSIGN _ IN _ RESULT _ CODE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Authentication Activity " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSIGN _ IN _ RESULT _ CODE Ġ= Ġ 1 0 0 1 ĊĠĠĠ Ġ} Ċ } Ċ