package Ġonline . lit ter ae . family organ izer . implementation . family Ċ Ċ import Ġcom . google . firebase . database .* Ċ import Ġonline . lit ter ae . family organ izer . abstract s . firebase . Base Firebase Manager Ċ import Ġonline . lit ter ae . family organ izer . application . Const . Companion . ERROR _ INV IT ATION _ AL READY _ SENT Ċ import Ġonline . lit ter ae . family organ izer . application . Const . Companion . GROUP _ NAME Ċ import Ġonline . lit ter ae . family organ izer . application . Const . Companion . INV IT ATION _ STATUS Ċ import Ġonline . lit ter ae . family organ izer . application . Const . Companion . STATUS _ NEW Ċ import Ġonline . lit ter ae . family organ izer . application . Const . Companion . STATUS _ SE EN Ċ import Ġonline . lit ter ae . family organ izer . application . Const . Companion . INV IT ED _ EMAIL Ċ import Ġonline . lit ter ae . family organ izer . application . Const . Companion . STATUS _ DECL IN ED Ċ import Ġonline . lit ter ae . family organ izer . application . Const . Companion . TABLE _ GROUP S Ċ import Ġonline . lit ter ae . family organ izer . application . Const . Companion . TABLE _ INV IT ATIONS Ċ import Ġonline . lit ter ae . family organ izer . application . Const . Companion . TABLE _ USERS Ċ import Ġonline . lit ter ae . family organ izer . application . Main Application Ċ import Ġonline . lit ter ae . family organ izer . firebase . Firebase Group Ċ import Ġonline . lit ter ae . family organ izer . firebase . Invitation Ċ import Ġonline . lit ter ae . family organ izer . sqlite . My Group Ċ Ċ class ĠFamily Firebase Manager : ĠBase Firebase Manager < Family Contract . Presenter >(), ĠFamily Contract . Firebase Manager Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġinv itations Ref : ĠDatabase Reference ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgroup Ref : ĠDatabase Reference ĊĊĠĠĠ Ġ/* ĊĠĠĠ ĠKeep s Ġfirebase Ġkey Ġof Ġthe Ġlast Ġseen Ġinv itation ĊĠĠĠ Ġand Ġthus Ġhelps Ġto Ġavoid Ġprocessing Ġthe Ġsame Ġinv itation Ġtwice ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġseen Invitation Key : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Application . create Page Component (). inject ( this ) ĊĠĠĠĠĠĠĠ Ġinv itations Ref Ġ= Ġdb Reference . child ( TABLE _ INV IT ATIONS ) ĊĠĠĠĠĠĠĠ Ġinv itations Ref . addChild EventListener ( object Ġ: ĠChild EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Added ( data Snapshot : ĠData Snapshot , Ġprevious Child Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv ited Ġ= Ġdata Snapshot . child ( INV IT ED _ EMAIL ). value Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġdata Snapshot . child ( INV IT ATION _ STATUS ). value Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inv ited Ġ== Ġnull Ġ|| Ġinv ited Ġ!= Ġmy Email . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġstatus Ġ== Ġnull Ġ|| Ġstatus Ġ!= ĠSTATUS _ NEW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv itation Ġ= Ġdata Snapshot . getValue ( Invitation :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv itation Firebase Key Ġ= Ġdata Snapshot . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inv itation Ġ!= Ġnull Ġ&& Ġinv itation Firebase Key Ġ!= Ġseen Invitation Key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseen Invitation Key Ġ= Ġinv itation Firebase Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinv itations Ref . update Children ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of < String , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ $ inv itation Firebase Key / status " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATUS _ SE EN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter ?. process Received Invitation ( inv itation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Changed ( snapshot : ĠData Snapshot , Ġprevious Child Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Removed ( snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Moved ( snapshot : ĠData Snapshot , Ġprevious Child Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Group To Firebase ( name : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroup Firebase Key Ġ= Ġdb Reference . child ( TABLE _ GROUP S ). push (). key ĊĠĠĠĠĠĠĠ Ġdb Reference . update Children ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of < String , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ ${ TABLE _ GROUP S }/ $ group Firebase Key " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Group ( name ). toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġgroup Firebase Key ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Me To Firebase Group Users ( groupName : ĠString , Ġgroup Firebase Key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb Reference . update Children ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of < String , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ $ TABLE _ GROUP S /$ group Firebase Key / users /$ my Firebase Key " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Email . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Invitation To Firebase ( inv itation : ĠInv itation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinv itations Ref . addListener For Single Value Event ( object Ġ: ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġalready Sent Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( inv itation Snapshot Ġin Ġsnapshot . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv ited Ġ= Ġinv itation Snapshot . child ( INV IT ED _ EMAIL ). value Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgroupName Ġ= Ġinv itation Snapshot . child ( GROUP _ NAME ). value Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġinv itation Snapshot . child ( INV IT ATION _ STATUS ). value Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inv ited Ġ== Ġinv itation . inv ited Email Ġ&& ĠgroupName Ġ== Ġinv itation . groupName Ġ&& Ġ( status Ġ!= ĠSTATUS _ DECL IN ED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalready Sent Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( already Sent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter ?. report Error ( ERROR _ INV IT ATION _ AL READY _ SENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinv itation . sender Email Ġ= Ġmy Email . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv itation Firebase Key Ġ= Ġdb Reference . child ( TABLE _ INV IT ATIONS ). push (). key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinv itation Firebase Key ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinv itation . inv itation Firebase Key Ġ= Ġinv itation Firebase Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Reference . update Children ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of < String , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ $ TABLE _ INV IT ATIONS /$ inv itation Firebase Key " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinv itation . toMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter ?. report Success ("${ inv itation . inv ited Email } Ġinv ited Ġto Ġgroup Ġ${ inv itation . groupName }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter ?. on Invitation Added To Firebase ( inv itation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe To Updates ( my Group : ĠMy Group ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgroup Ref Ġ= Ġdb Reference . child ( TABLE _ GROUP S ). child ( my Group . group Firebase Key ) ĊĠĠĠĠĠĠĠ Ġgroup Ref . child ( TABLE _ USERS ). add Value EventListener ( object Ġ: ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfriends Ġ= Ġarray ListOf < Pair < String , ĠString >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( user Snapshot Ġin Ġsnapshot . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Firebase Key Ġ= Ġuser Snapshot . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Email Ġ= Ġuser Snapshot . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Firebase Key Ġis ĠString Ġ&& Ġuser Email Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriends . add ( Pair ( user Firebase Key , Ġuser Email )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter ?. update Friends ( friends ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }