package Ġcom . login . helper . impl . facebook Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġcom . facebook .* Ċ import Ġcom . facebook . appe vents . App Events Logger Ċ import Ġcom . facebook . login . Login Manager Ċ import Ġcom . facebook . login . Login Result Ċ import Ġcom . login . helper . core . IS ocial Network Ċ import Ġcom . login . helper . core . On CallBack Ċ import Ġcom . login . helper . core . Social Network Ċ import Ġcom . login . helper . data . model . LoggedIn User Ċ import Ġcom . login . helper . impl . facebook . transformer . map Ċ import Ġorg . json . JSONObject Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠFace Book Social Network Impl Ġ@ Inject Ġconstructor ( private Ġval Ġcontext : ĠContext ) Ġ: ĠIS ocial Network , ĊĠĠĠ ĠFacebook Callback < Login Result > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Google Social Network Impl " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBASE _ URL Ġ= Ġ" https :// graph . facebook . com /" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠURL _ PI CTURE _ PARAMS Ġ= Ġ"/ picture ? width = 2 5 0 & height = 2 5 0 " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFI ELDS Ġ= Ġ" fields " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ ID Ġ= Ġ" id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ FIRST _ NAME Ġ= Ġ" first _ name " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ LAST _ NAME Ġ= Ġ" last _ name " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ EMAIL Ġ= Ġ" email " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcall Back : ĠOn CallBack ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcallback Manager : ĠCallback Manager ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// FB ĊĠĠĠĠĠĠĠ Ġval Ġapplication Context Ġ= Ġcontext . application Context ĊĠĠĠĠĠĠĠ ĠFacebook Sdk . sdk Initialize ( application Context ) ĊĠĠĠĠĠĠĠ ĠApp Events Logger . activate App ( application Context Ġas ĠApplication ) ĊĠĠĠĠĠĠĠ Ġcallback Manager Ġ= ĠCallback Manager . Factory . create () ĊĊĠĠĠĠĠĠĠ Ġval Ġis LoggedIn Ġ= Ġis Login () ĊĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠĠĠĠĠ Ġif Ġ( is LoggedIn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġpermission Needs Ġ= ĠlistOf (" email ") Ġ// " public _ profile " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Login Manager . getInstance (). log In With Read Permissions ( activity , Ġpermission Needs ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsocial Network Type (): ĠSocial Network Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSocial Network . Face Book ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Login (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠaccessToken Ġ= ĠAccess Token . getCurrent AccessToken () ĊĠĠĠĠĠĠĠ Ġreturn ĠaccessToken Ġ!= Ġnull Ġ&& Ġ! accessToken . is Expired ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaccount (): ĠLog ged In User ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Login ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofile Ġ= ĠProfile . getCurrent Profile () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprofile ?. map () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlogin ( activity : ĠActivity , Ġsocial Network : ĠSocial Network ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogin Manager . getInstance (). log Out () ĊĠĠĠĠĠĠĠ Ġval Ġpermission Needs Ġ= ĠlistOf (" email ") Ġ// " public _ profile " ĊĠĠĠĠĠĠĠ ĠLogin Manager . getInstance (). log In With Read Permissions ( activity , Ġpermission Needs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlogout ( on Logout : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogin Manager . getInstance (). log Out () ĊĠĠĠĠĠĠĠ Ġon Logout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallback Manager . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Listener ( call Back : ĠOn CallBack ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . call Back Ġ= Ġcall Back ĊĠĠĠĠĠĠĠ Ġif Ġ( call Back Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Manager . getInstance (). unregister Callback ( callback Manager ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Manager . getInstance (). register Callback ( callback Manager , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonSuccess Facebook Login ( result : ĠLogin Result ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠGraph Request . new Me Request ( result . accessToken ) Ġ{ Ġobj , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Back ?. on Login ( getData ( obj , Ġresult . accessToken . token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġe . message , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġparameters . putString ( FIELDS , Ġ"${ KEY _ ID }, ${ KEY _ FIRST _ NAME }, ${ KEY _ LAST _ NAME }, ${ KEY _ EMAIL }") ĊĠĠĠĠĠĠĠ Ġrequest . parameters Ġ= Ġparameters ĊĠĠĠĠĠĠĠ Ġrequest . execute Async () ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ// implement ĠFacebook Callback < Login Result > Ġ-------------------------------- -- ĊĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠLogin Result ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Facebook Login ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cancel () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠFacebook Exception ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Facebook Callback < Login Result > Ġ-------------------------------- ------------ ĊĊĠĠĠ Ġprivate Ġfun ĠgetData ( obj : ĠJSONObject , Ġtoken : ĠString ): ĠLog ged In User Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġobj . getString ( KEY _ ID ) ĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġobj . getString ( KEY _ EMAIL ) ĊĠĠĠĠĠĠĠ Ġval ĠfirstName Ġ= Ġobj . getString ( KEY _ FIRST _ NAME ) ĊĠĠĠĠĠĠĠ Ġval ĠlastName Ġ= Ġobj . getString ( KEY _ LAST _ NAME ) ĊĠĠĠĠĠĠĠ Ġval Ġpicture Ġ= ĠUri . parse ( BASE _ URL Ġ+ Ġid Ġ+ ĠURL _ PI CTURE _ PARAMS ) ĊĠĠĠĠĠĠĠ Ġreturn ĠLog ged In User ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Token Ġ= Ġtoken , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdisplayName Ġ= Ġ"$ firstName Ġ$ lastName ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Url Ġ= Ġpicture ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ }