/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠNew ĠVector ĠLtd Ċ Ġ* Ġ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 . api Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . Process Lifecycle Owner Ċ import Ġandroidx . work . Configuration Ċ import Ġandroidx . work . Work Manager Ċ import Ġcom . zh u inden . mon arch y . Mon arch y Ċ import Ġorg . matrix . android . sdk . Build Config Ċ import Ġorg . matrix . android . sdk . api . auth . Authentication Service Ċ import Ġorg . matrix . android . sdk . api . legacy . Legacy Session Importer Ċ import Ġorg . matrix . android . sdk . internal . Session Manager Ċ import Ġorg . matrix . android . sdk . internal . di . D agger Matrix Component Ċ import Ġorg . matrix . android . sdk . internal . network . UserAgent Holder Ċ import Ġorg . matrix . android . sdk . internal . util . Background Detection Observer Ċ import Ġorg . matrix . ol m . O lm Manager Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġthe Ġmain Ġentry Ġpoint Ġto Ġthe Ġmatrix Ġsdk . Ċ Ġ* ĠTo Ġget Ġthe Ġsingleton Ġinstance , Ġuse ĠgetInstance Ġstatic Ġmethod . Ċ Ġ*/ Ċ class ĠMatrix Ġprivate Ġconstructor ( context : ĠContext , Ġmatrix Configuration : ĠMatrix Configuration ) Ġ{ ĊĊĠĠĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar Ġlegacy Session Importer : ĠLegacy Session Importer ĊĠĠĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar Ġauthentication Service : ĠAuthentication Service ĊĠĠĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar Ġuser Agent Holder : ĠUser Agent Holder ĊĠĠĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar Ġbackground Detection Observer : ĠBackground Detection Observer ĊĠĠĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar Ġol m Manager : ĠO lm Manager ĊĠĠĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar Ġsession Manager : ĠSession Manager ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠMon arch y . init ( context ) ĊĠĠĠĠĠĠĠ ĠD agger Matrix Component . factory (). create ( context , Ġmatrix Configuration ). inject ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( context . application Context Ġ! is ĠConfiguration . Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . initialize ( context , ĠConfiguration . Builder (). set Executor ( Executors . new Cached ThreadPool ()). build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠProcess Lifecycle Owner . get (). lifecycle . add Observer ( background Detection Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser Agent () Ġ= Ġuser Agent Holder . userAgent ĊĊĠĠĠ Ġfun Ġauthentication Service (): ĠAuthentication Service Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġauthentication Service ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlegacy Session Importer (): ĠLegacy Session Importer Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlegacy Session Importer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġinstance : ĠMatrix ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġis Init Ġ= ĠAtomic Boolean ( false ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġinitialize ( context : ĠContext , Ġmatrix Configuration : ĠMatrix Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Init . compare AndSet ( false , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠMatrix ( context . application Context , Ġmatrix Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠMatrix Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Init . compare AndSet ( false , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Context Ġ= Ġcontext . application Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app Context Ġis ĠMatrix Configuration . Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Configuration Ġ= Ġ( app Context Ġas ĠMatrix Configuration . Provider ). provides Matrix Configuration () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠMatrix ( app Context , Ġmatrix Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Matrix Ġis Ġnot Ġinitialized Ġproperly ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠYou Ġshould Ġcall ĠMatrix . initialize Ġor Ġlet Ġyour Ġapplication Ġimplements ĠMatrix Configuration . Provider .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Sdk Version (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBuild Config . VERSION _ NAME Ġ+ Ġ" Ġ(" Ġ+ ĠBuild Config . GIT _ SDK _ REVISION Ġ+ Ġ")" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ