package Ġcom . ax mor . ipc Ċ Ċ import Ġandroid . os .* Ċ import Ġandroid . util . Log ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġa ko lo dy az hn yy Ġon Ġ 1 1 / 1 0 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠIP CO b servable Client < T >( private Ġval Ġcallback Looper : ĠL ooper ) Ġ: ĠIP CO b servable < T > Ġ{ ĊĠĠĠ Ġval Ġmess enger : ĠMess enger ĊĊĠĠĠ Ġprivate Ġvar Ġobservable Proxy : ĠIP CO b servable Proxy < T >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġob servers Ġ= ĠHashMap < IP CO b server < T >, ĠIP CO b server Wrapper < T >>() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . messenger Ġ= ĠMess enger ( Callback Handler ( callback Looper )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Observable Created ( observable Proxy : ĠIP CO b servable Proxy < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . observable Proxy Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" observable Proxy Ġalready Ġset ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . observable Proxy Ġ= Ġobservable Proxy ĊĠĠĠĠĠĠĠ Ġregister All Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister All Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( ob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( wrapper Ġin Ġob servers . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Proxy !!. send Add Observer ( wrapper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Observer ( observer : ĠIP CO b server < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( observer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsynchronized ( ob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwrapper : ĠIP CO b server Wrapper < T >? Ġ= Ġob servers . get ( observer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wrapper Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" add Observer : ĠAlready Ġhave Ġwrapper Ġfor Ġobserver , Ġignoring ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper Ġ= ĠIP CO b server Wrapper ( observer , Ġcallback Looper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġob servers . put ( observer , Ġwrapper ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( observable Proxy Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Proxy !!. send Add Observer ( wrapper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Observer ( observer : ĠIP CO b server < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( observer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsynchronized ( ob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrapper Ġ= Ġob servers . get ( observer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wrapper Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" remove Observer : ĠNo Ġwrapper Ġfound Ġfor Ġobserver , Ġignoring ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper !!. destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġob servers . remove ( observer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( observable Proxy Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Proxy !!. send Remove Observer ( wrapper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠCallback Handler ( lo oper : ĠL ooper ) Ġ: ĠHandler ( lo oper ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( msg . what Ġ!= ĠMSG _ OB SERV ABLE _ CREATED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unknown Ġmessage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmsg . getData () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . set ClassLoader ( IP CO b servable Client :: class . java . class Loader ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobservable Messenger Ġ= Ġdata . get Parcelable < Messenger >( KEY _ OB SERV ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobservable Proxy Ġ= ĠIP CO b servable Proxy < T >( observable Messenger ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Observable Created ( observable Proxy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= Ġ" Worker Observable Client " ĊĊĠĠĠĠĠĠĠ Ġval ĠMSG _ OB SERV ABLE _ CREATED Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠKEY _ OB SERV ABLE Ġ= Ġ" observable " ĊĠĠĠ Ġ} Ċ } Ċ