/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠMatrix . org ĠFoundation ĠC . I . C . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . matrix . android . sdk . internal . session . room Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġorg . matrix . android . sdk . api . Matrix Coroutine Dispatch ers Ċ import Ġorg . matrix . android . sdk . api . crypto . MX CRYPTO _ ALGORITHM _ ME G OL M Ċ import Ġorg . matrix . android . sdk . api . session . crypto . Crypto Service Ċ import Ġorg . matrix . android . sdk . api . session . events . model . EventType Ċ import Ġorg . matrix . android . sdk . api . session . room . Room Ċ import Ġorg . matrix . android . sdk . api . session . room . account data . Room Account DataService Ċ import Ġorg . matrix . android . sdk . api . session . room . alias . Alias Service Ċ import Ġorg . matrix . android . sdk . api . session . room . call . Room Call Service Ċ import Ġorg . matrix . android . sdk . api . session . room . members . Membership Service Ċ import Ġorg . matrix . android . sdk . api . session . room . model . Room Summary Ċ import Ġorg . matrix . android . sdk . api . session . room . model . Room Type Ċ import Ġorg . matrix . android . sdk . api . session . room . model . relation . Relation Service Ċ import Ġorg . matrix . android . sdk . api . session . room . notification . Room Push Rule Service Ċ import Ġorg . matrix . android . sdk . api . session . room . read . Read Service Ċ import Ġorg . matrix . android . sdk . api . session . room . reporting . Reporting Service Ċ import Ġorg . matrix . android . sdk . api . session . room . send . Draft Service Ċ import Ġorg . matrix . android . sdk . api . session . room . send . Send Service Ċ import Ġorg . matrix . android . sdk . api . session . room . state . State Service Ċ import Ġorg . matrix . android . sdk . api . session . room . tags . Tags Service Ċ import Ġorg . matrix . android . sdk . api . session . room . threads . Threads Service Ċ import Ġorg . matrix . android . sdk . api . session . room . threads . local . Threads Local Service Ċ import Ġorg . matrix . android . sdk . api . session . room . timeline . Timeline Service Ċ import Ġorg . matrix . android . sdk . api . session . room . typing . Typing Service Ċ import Ġorg . matrix . android . sdk . api . session . room . uploads . Upload s Service Ċ import Ġorg . matrix . android . sdk . api . session . room . version . Room Version Service Ċ import Ġorg . matrix . android . sdk . api . session . search . SearchResult Ċ import Ġorg . matrix . android . sdk . api . session . space . Space Ċ import Ġorg . matrix . android . sdk . api . util . Optional Ċ import Ġorg . matrix . android . sdk . api . util . await Callback Ċ import Ġorg . matrix . android . sdk . internal . session . permalink s . Via Parameter Finder Ċ import Ġorg . matrix . android . sdk . internal . session . room . state . Send State Task Ċ import Ġorg . matrix . android . sdk . internal . session . room . summary . Room Summary DataSource Ċ import Ġorg . matrix . android . sdk . internal . session . search . Search Task Ċ import Ġorg . matrix . android . sdk . internal . session . space . Default Space Ċ import Ġjava . security . Invalid Parameter Exception Ċ Ċ internal Ġclass ĠDefault Room ( override Ġval Ġroom Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġroom Summary DataSource : ĠRoom Summary DataSource , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtimeline Service : ĠTimeline Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġthreads Service : ĠThread s Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġthreads Local Service : ĠThread s Local Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġsend Service : ĠSend Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdraft Service : ĠDraft Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġstate Service : ĠState Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġuploads Service : ĠUp loads Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġreporting Service : ĠReporting Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġroom Call Service : ĠRoom Call Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġread Service : ĠRead Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtyping Service : ĠTyp ing Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġalias Service : ĠAlias Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtags Service : ĠTags Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcrypto Service : ĠCrypto Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġrelation Service : ĠRelation Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġroom Members Service : ĠMembers hip Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġroom Push Rule Service : ĠRoom Push Rule Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġroom Account DataService : ĠRoom Account DataService , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġroom Version Service : ĠRoom Version Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġsend State Task : ĠSend State Task , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġvia Parameter Finder : ĠV ia Parameter Finder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġsearch Task : ĠSearch Task , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġcoroutine Dispatch ers : ĠMatrix Coroutine Dispatch ers Ċ ) Ġ: ĊĠĠĠĠĠĠĠ ĠRoom , ĊĠĠĠĠĠĠĠ ĠTimeline Service Ġby Ġtimeline Service , ĊĠĠĠĠĠĠĠ ĠThread s Service Ġby Ġthreads Service , ĊĠĠĠĠĠĠĠ ĠThread s Local Service Ġby Ġthreads Local Service , ĊĠĠĠĠĠĠĠ ĠSend Service Ġby Ġsend Service , ĊĠĠĠĠĠĠĠ ĠDraft Service Ġby Ġdraft Service , ĊĠĠĠĠĠĠĠ ĠState Service Ġby Ġstate Service , ĊĠĠĠĠĠĠĠ ĠUp loads Service Ġby Ġuploads Service , ĊĠĠĠĠĠĠĠ ĠReporting Service Ġby Ġreporting Service , ĊĠĠĠĠĠĠĠ ĠRoom Call Service Ġby Ġroom Call Service , ĊĠĠĠĠĠĠĠ ĠRead Service Ġby Ġread Service , ĊĠĠĠĠĠĠĠ ĠTyp ing Service Ġby Ġtyping Service , ĊĠĠĠĠĠĠĠ ĠAlias Service Ġby Ġalias Service , ĊĠĠĠĠĠĠĠ ĠTags Service Ġby Ġtags Service , ĊĠĠĠĠĠĠĠ ĠRelation Service Ġby Ġrelation Service , ĊĠĠĠĠĠĠĠ ĠMembers hip Service Ġby Ġroom Members Service , ĊĠĠĠĠĠĠĠ ĠRoom Push Rule Service Ġby Ġroom Push Rule Service , ĊĠĠĠĠĠĠĠ ĠRoom Account DataService Ġby Ġroom Account DataService , ĊĠĠĠĠĠĠĠ ĠRoom Version Service Ġby Ġroom Version Service Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Room Summary Live (): ĠLive Data < Optional < Room Summary >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroom Summary DataSource . get Room Summary Live ( roomId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġroom Summary (): ĠRoom Summary ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroom Summary DataSource . get Room Summary ( roomId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Encrypted (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcrypto Service . is Room Encrypted ( roomId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġencryption Algorithm (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcrypto Service . get Encryption Algorithm ( roomId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Encrypt For Inv ited Members (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcrypto Service . should Encrypt For Inv ited Members ( roomId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġprepare To Encrypt () Ġ{ ĊĠĠĠĠĠĠĠ Ġawait Callback < Unit > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcrypto Service . prepare To Encrypt ( roomId , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġenable Encryption ( algorithm : ĠString , Ġforce : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(! force Ġ&& Ġis Encrypted () Ġ&& Ġencryption Algorithm () Ġ== ĠMX CRYPTO _ ALGORITHM _ ME G OL M ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Encryption Ġis Ġalready Ġenabled Ġfor Ġthis Ġroom ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(! force Ġ&& Ġalgorithm Ġ!= ĠMX CRYPTO _ ALGORITHM _ ME G OL M ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Parameter Exception (" Only ĠMX CRYPTO _ ALGORITHM _ ME G OL M Ġalgorithm Ġis Ġsupported ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠSend State Task . Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom Id Ġ= Ġroom Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Key Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠeventType Ġ= ĠEventType . STATE _ ROOM _ ENCRYPT ION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" algorithm " Ġto Ġalgorithm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend State Task . execute ( params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsearch ( search Term : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Batch : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Recent : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Limit : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter Limit : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Profile : ĠBoolean ): ĠSearch Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsearch Task . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Task . Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Term Ġ= Ġsearch Term , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom Id Ġ= Ġroom Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Batch Ġ= Ġnext Batch , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Recent Ġ= ĠorderBy Recent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ= Ġlimit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Limit Ġ= Ġbefore Limit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter Limit Ġ= Ġafter Limit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Profile Ġ= Ġinclude Profile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Space (): ĠSpace ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( room Summary ()?. room Type Ġ!= ĠRoom Type . SPACE ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠDefault Space ( this , Ġroom Summary DataSource , Ġvia Parameter Finder ) ĊĠĠĠ Ġ} Ċ } Ċ