/* Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby Ġ 2 0 2 0 Ġke elim Ġ( J ae hy un ĠKim ) Ċ Ġ* Ċ Ġ* Ġ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 . ke elim . nand adi agnosis . ui . auth Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġandroidx . core . view . is G one Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġco il . load Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Options Ċ import Ġcom . google . android . gms . common . api . ApiException Ċ import Ġcom . google . firebase . auth . Google Auth Provider Ċ import Ġcom . google . firebase . auth . k tx . auth Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġcom . ke elim . common . toast Ċ import Ġcom . ke elim . nand adi agnosis . databinding . Fragment Profile Binding Ċ import Ġcom . ke elim . nand adi agnosis . ui . main . favorite . Favorite Adapter Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Android EntryPoint Ċ class ĠProfile Fragment Ġ: ĠFragment () Ġ{ ĊĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Profile Binding ? Ġ= Ġnull ĊĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĠ Ġprivate Ġval ĠviewModel : ĠProfile ViewModel Ġby Ġview Models () ĊĊĠ Ġprivate Ġval Ġg so Ġby Ġlazy Ġ{ ĊĠĠĠ ĠGoogle SignIn Options . Builder ( Google SignIn Options . DEFAULT _ SIGN _ IN ) Ċ // ĠĠĠĠĠ Ġ. requestId Token ( getString ( R . string . d )) ĊĠĠĠĠĠ Ġ. request Email () ĊĠĠĠĠĠ Ġ. build () ĊĠ Ġ} ĊĠ Ġprivate Ġval Ġg sc Ġby Ġlazy Ġ{ ĠGoogle SignIn . getClient ( require Activity (), Ġg so ) Ġ} ĊĠ Ġprivate Ġval Ġadapter Ġ= ĠF avorite Adapter () ĊĠ Ġprivate Ġval Ġauth Ġby Ġlazy Ġ{ ĠFirebase . auth Ġ} ĊĊĠ Ġprivate Ġval Ġlogin Launcher Ġ= ĊĠĠĠ Ġregister For Activity Result ( Activity Result Contracts . Start Activity For Result ()) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠ Ġif Ġ( result . result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠGoogle SignIn . get Signed In Account From Intent ( result . data ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask . getResult ( ApiException :: class . java )?. let Ġ{ Ġaccount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" firebase Ġwith Ġgoogle Ġ${ account . id }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Token ( account . id Token Ġ?: Ġthrow ĠException ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠException () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠ Ġ): ĠView Ġ{ ĊĠĠĠ Ġ_ binding Ġ= ĠFragment Profile Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġreturn Ġbinding . root ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠ Ġobserve Data () ĊĠĠĠ ĠviewModel . fetch Data () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġobserve Data () Ġ= ĠviewModel . profile State . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠ Ġis ĠProfile State . Un Initialized Ġ-> Ġinit Views () ĊĠĠĠĠĠ Ġis ĠProfile State . Loading Ġ-> Ġhandle Loading () ĊĠĠĠĠĠ Ġis ĠProfile State . Login Ġ-> Ġhandle Login ( it ) ĊĠĠĠĠĠ Ġis ĠProfile State . Success Ġ-> Ġhandle Success ( it ) ĊĠĠĠĠĠ Ġis ĠProfile State . Error Ġ-> Ġhandle Error () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinit Views () Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠ Ġprofile Recycler . adapter Ġ= Ġadapter ĊĠĠĠ Ġprofile Recycler . layout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠ Ġlogin Button . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġsign In Google () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlogout Button . setOnClickListener Ġ{ ĊĠĠĠĠĠ ĠviewModel . sign Out () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsign In Google () Ġ{ ĊĠĠĠ Ġval Ġsign In Intent Ġ= Ġg sc . signIn Intent ĊĠĠĠ Ġlogin Launcher . launch ( signIn Intent ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġhandle Loading () Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠ ĠprogressBar . isVisible Ġ= Ġtrue ĊĠĠĠ Ġlogin Required Group . is G one Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġhandle Success ( state : ĠProfile State . Success ) Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠ ĠprogressBar . is G one Ġ= Ġtrue ĊĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠ Ġis ĠProfile State . Success . Registered Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Register ( state ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġis ĠProfile State . Success . Not Registered Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġprofile Group . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlogin Required Group . isVisible Ġ= Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġhandle Login ( state : ĠProfile State . Login ) Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠ ĠprogressBar . isVisible Ġ= Ġtrue ĊĠĠĠ Ġval Ġcredential Ġ= ĠGoogle Auth Provider . getC redential ( state . token , Ġnull ) ĊĠĠĠ Ġauth . signIn With Credential ( credential ) ĊĠĠĠĠĠ Ġ. add On Complete Listener ( require Activity ()) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġauth . currentUser ĊĠĠĠĠĠĠĠĠĠ ĠviewModel . setUser ( user ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠviewModel . setUser ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġhandle Register ( state : ĠProfile State . Success . Registered ) Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠ ĠTim ber . w (" ê°Ĵ Ġ$ state ") ĊĠĠĠ Ġprofile Group . isVisible Ġ= Ġtrue ĊĠĠĠ Ġlogin Required Group . is G one Ġ= Ġtrue ĊĠĠĠ ĠimageView . load ( state . profile Image . toString ()) ĊĠĠĠ ĠuserId . text Ġ= Ġstate . userName ĊĊĠĠĠ Ġif Ġ( state . favorite List . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġno Text . is G one Ġ= Ġfalse ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġno Text . is G one Ġ= Ġtrue ĊĠĠĠĠĠ Ġadapter . submit List ( state . favorite List ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġhandle Error () Ġ{ ĊĠĠĠ Ġrequire Activity (). toast (" ìĹĲ ëŁ¬ ê°Ģ Ġë°ľ ìĥĿ íĸĪ ìĬµëĭĪëĭ¤ .") ĊĠ Ġ} Ċ } Ċ