package Ġcom . g sm . bee _ assistant _ android . ui . login . google Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . util . Log Ċ import Ġcom . google . android . gms . auth . api . Auth Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . Google Auth Provider Ċ import Ġcom . g sm . bee _ assistant _ android . di . app . My Application Ċ import Ġcom . g sm . bee _ assistant _ android . ret rofit . repository . UserRepository Ċ import Ġcom . g sm . bee _ assistant _ android . ui . login . class room . Class room Login Activity Ċ import Ġcom . g sm . bee _ assistant _ android . ui . main . MainActivity Ċ import Ġcom . g sm . bee _ assistant _ android . ui . sets ch ool . Set School Activity Ċ import Ġcom . g sm . bee _ assistant _ android . utils . Data Singleton Ċ import Ġcom . g sm . bee _ assistant _ android . utils . Preference Manager Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠGoogle Login Presenter Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġoverride Ġval Ġview : ĠGoogle Login Contract . View , ĊĠĠĠ Ġoverride Ġval Ġcomposite Disposable : ĠComposite Disposable , ĊĠĠĠ Ġprivate Ġval Ġpref : ĠPreference Manager , ĊĠĠĠ Ġprivate Ġval Ġuser Api : ĠUser Repository Ċ ) Ġ: ĠGoogle Login Contract . Presenter Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġgoogle Login ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġ 1 0 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠAuth . Google SignIn Api . get SignIn Result From Intent ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !!. is Success ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġresult . signIn Account ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠGoogle Auth Provider . getC redential ( account ?. id Token , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Disposable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Auth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. signIn With Credential ( credential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠgetToken ( account ?. email . toString ()) Ġ}, Ġ{ Ġit . printStackTrace () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetToken ( email : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġview . show Progress () ĊĊĠĠĠĠĠĠĠ Ġadd Disposable ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Api . getUser Token ( email ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" user Token ", Ġit . token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref . setData ( My Application . Key . USER _ TOKEN . toString (), Ġit . token ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetUser Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Disposable ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Api . getUser Info ( pref . getData ( My Application . Key . USER _ TOKEN . toString ()) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Singleton . getInstance ()? ._ userInfo Ġ= Ġit ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Progress (). apply Ġ{ Ġcheck UserInfo To Change Activity () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck UserInfo To Change Activity () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠuserInfo Ġ= ĠData Singleton . getInstance ()? ._ userInfo !! ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserInfo . access _ token Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . startActivity ( Class room Login Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . finish Activity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserInfo . name Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . startActivity ( Set School Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . finish Activity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . startActivity ( MainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . finish Activity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset School Info () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgoogle SignIn ( signIn Intent : ĠIntent ) Ġ= Ġview . show Login ( signIn Intent ) ĊĊĠĠĠ Ġoverride Ġfun Ġadd Disposable ( dis posable : ĠDis posable ) Ġ{ Ġcomposite Disposable . add ( dis posable ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose Disposable () Ġ= Ġcomposite Disposable . dispose () Ċ }