package Ġcom . hu aw en . base library . views . b anners Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . os . Message Ċ import Ġandroidx . annotation . Visible ForTesting Ċ Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util . concurrent . locks . Lock Ċ import Ġjava . util . concurrent . locks . Re entrant Lock Ċ Ċ class ĠWeak Handler Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Callback : ĠHandler . Callback ?= null Ġ// Ġhard Ġreference Ġto ĠCallback . ĠWe Ġneed Ġto Ġkeep Ġcallback Ġin Ġmemory ĊĠĠĠ Ġprivate Ġvar Ġm Exec : ĠExec Handler ?= null ĊĠĠĠ Ġprivate Ġval Ġm Lock Ġ= ĠRe entrant Lock () ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġval Ġm Run n ables Ġ= ĠCh ained Ref ( m Lock , Ġnull ) ĊĊĠĠĠ Ġval Ġlo oper : ĠL ooper ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Exec !!. lo oper ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefault Ġconstructor Ġassoci ates Ġthis Ġhandler Ġwith Ġthe Ġ[ Looper ] Ġfor Ġthe ĊĠĠĠĠ Ġ* Ġcurrent Ġthread . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthis Ġthread Ġdoes Ġnot Ġhave Ġa Ġlo oper , Ġthis Ġhandler Ġwon 't Ġbe Ġable Ġto Ġreceive Ġmessages ĊĠĠĠĠ Ġ* Ġso Ġan Ġexception Ġis Ġthrown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Exec Ġ= ĠExec Handler () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructor Ġassoci ates Ġthis Ġhandler Ġwith Ġthe Ġ[ Looper ] Ġfor Ġthe ĊĠĠĠĠ Ġ* Ġcurrent Ġthread Ġand Ġtakes Ġa Ġcallback Ġinterface Ġin Ġwhich Ġyou Ġcan Ġhandle ĊĠĠĠĠ Ġ* Ġmessages . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthis Ġthread Ġdoes Ġnot Ġhave Ġa Ġlo oper , Ġthis Ġhandler Ġwon 't Ġbe Ġable Ġto Ġreceive Ġmessages ĊĠĠĠĠ Ġ* Ġso Ġan Ġexception Ġis Ġthrown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback ĠThe Ġcallback Ġinterface Ġin Ġwhich Ġto Ġhandle Ġmessages , Ġor Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( callback : ĠHandler . Callback ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġcallback Ġ// ĠHard Ġreferencing Ġbody ĊĠĠĠĠĠĠĠ Ġm Exec Ġ= ĠExec Handler ( Weak Reference < Handler . Callback >( callback )) Ġ// ĠWeak Ġreferencing Ġinside ĠExec Handler ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUse Ġthe Ġprovided Ġ[ Looper ] Ġinstead Ġof Ġthe Ġdefault Ġone . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlo oper ĠThe Ġlo oper , Ġmust Ġnot Ġbe Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( lo oper : ĠL ooper ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Exec Ġ= ĠExec Handler ( lo oper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUse Ġthe Ġprovided Ġ[ Looper ] Ġinstead Ġof Ġthe Ġdefault Ġone Ġand Ġtake Ġa Ġcallback ĊĠĠĠĠ Ġ* Ġinterface Ġin Ġwhich Ġto Ġhandle Ġmessages . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlo oper ĠThe Ġlo oper , Ġmust Ġnot Ġbe Ġnull . ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback ĠThe Ġcallback Ġinterface Ġin Ġwhich Ġto Ġhandle Ġmessages , Ġor Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( lo oper : ĠL ooper , Ġcallback : ĠHandler . Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġm Exec Ġ= ĠExec Handler ( lo oper , ĠWeak Reference < Handler . Callback >( callback )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCause s Ġthe ĠRunnable Ġr Ġto Ġbe Ġadded Ġto Ġthe Ġmessage Ġqueue . ĊĠĠĠĠ Ġ* ĠThe Ġrunnable Ġwill Ġbe Ġrun Ġon Ġthe Ġthread Ġto Ġwhich Ġthis Ġhandler Ġis ĊĠĠĠĠ Ġ* Ġattached . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġr ĠThe ĠRunnable Ġthat Ġwill Ġbe Ġexecuted . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe ĠRunnable Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpost ( r : ĠRunnable ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. post ( wrap Runnable ( r )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCause s Ġthe ĠRunnable Ġr Ġto Ġbe Ġadded Ġto Ġthe Ġmessage Ġqueue , Ġto Ġbe Ġrun ĊĠĠĠĠ Ġ* Ġat Ġa Ġspecific Ġtime Ġgiven Ġby Ġ< var > uptime Millis </ var >. ĊĠĠĠĠ Ġ* Ġ** The Ġtime - base Ġis Ġ[ android . os . System Clock . uptime Millis ]. ** ĊĠĠĠĠ Ġ* ĠThe Ġrunnable Ġwill Ġbe Ġrun Ġon Ġthe Ġthread Ġto Ġwhich Ġthis Ġhandler Ġis Ġattached . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġr ĠThe ĠRunnable Ġthat Ġwill Ġbe Ġexecuted . ĊĠĠĠĠ Ġ* Ġ@ param Ġu ptime Millis ĠThe Ġabsolute Ġtime Ġat Ġwhich Ġthe Ġcallback Ġshould Ġrun , ĊĠĠĠĠ Ġ* Ġusing Ġthe Ġ[ android . os . System Clock . uptime Millis ] Ġtime - base . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe ĠRunnable Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . Ġ ĠNote Ġthat Ġa ĊĠĠĠĠ Ġ* Ġresult Ġof Ġtrue Ġdoes Ġnot Ġmean Ġthe ĠRunnable Ġwill Ġbe Ġprocessed Ġ-- Ġif ĊĠĠĠĠ Ġ* Ġthe Ġlo oper Ġis Ġquit Ġbefore Ġthe Ġdelivery Ġtime Ġof Ġthe Ġmessage ĊĠĠĠĠ Ġ* Ġoccurs Ġthen Ġthe Ġmessage Ġwill Ġbe Ġdropped . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpost At Time ( r : ĠRunnable , Ġu ptime Millis : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. post At Time ( wrap Runnable ( r ), Ġu ptime Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCause s Ġthe ĠRunnable Ġr Ġto Ġbe Ġadded Ġto Ġthe Ġmessage Ġqueue , Ġto Ġbe Ġrun ĊĠĠĠĠ Ġ* Ġat Ġa Ġspecific Ġtime Ġgiven Ġby Ġ< var > uptime Millis </ var >. ĊĠĠĠĠ Ġ* Ġ** The Ġtime - base Ġis Ġ[ android . os . System Clock . uptime Millis ]. ** ĊĠĠĠĠ Ġ* ĠThe Ġrunnable Ġwill Ġbe Ġrun Ġon Ġthe Ġthread Ġto Ġwhich Ġthis Ġhandler Ġis Ġattached . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġr ĠThe ĠRunnable Ġthat Ġwill Ġbe Ġexecuted . ĊĠĠĠĠ Ġ* Ġ@ param Ġu ptime Millis ĠThe Ġabsolute Ġtime Ġat Ġwhich Ġthe Ġcallback Ġshould Ġrun , ĊĠĠĠĠ Ġ* Ġusing Ġthe Ġ[ android . os . System Clock . uptime Millis ] Ġtime - base . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe ĠRunnable Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . Ġ ĠNote Ġthat Ġa ĊĠĠĠĠ Ġ* Ġresult Ġof Ġtrue Ġdoes Ġnot Ġmean Ġthe ĠRunnable Ġwill Ġbe Ġprocessed Ġ-- Ġif ĊĠĠĠĠ Ġ* Ġthe Ġlo oper Ġis Ġquit Ġbefore Ġthe Ġdelivery Ġtime Ġof Ġthe Ġmessage ĊĠĠĠĠ Ġ* Ġoccurs Ġthen Ġthe Ġmessage Ġwill Ġbe Ġdropped . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġandroid . os . System Clock . uptime Millis ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpost At Time ( r : ĠRunnable , Ġtoken : ĠAny , Ġu ptime Millis : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. post At Time ( wrap Runnable ( r ), Ġtoken , Ġu ptime Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCause s Ġthe ĠRunnable Ġr Ġto Ġbe Ġadded Ġto Ġthe Ġmessage Ġqueue , Ġto Ġbe Ġrun ĊĠĠĠĠ Ġ* Ġafter Ġthe Ġspecified Ġamount Ġof Ġtime Ġel ap ses . ĊĠĠĠĠ Ġ* ĠThe Ġrunnable Ġwill Ġbe Ġrun Ġon Ġthe Ġthread Ġto Ġwhich Ġthis Ġhandler ĊĠĠĠĠ Ġ* Ġis Ġattached . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġr ĠThe ĠRunnable Ġthat Ġwill Ġbe Ġexecuted . ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay Millis ĠThe Ġdelay Ġ( in Ġmilliseconds ) Ġuntil Ġthe ĠRunnable ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġexecuted . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe ĠRunnable Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . Ġ ĠNote Ġthat Ġa ĊĠĠĠĠ Ġ* Ġresult Ġof Ġtrue Ġdoes Ġnot Ġmean Ġthe ĠRunnable Ġwill Ġbe Ġprocessed Ġ-- ĊĠĠĠĠ Ġ* Ġif Ġthe Ġlo oper Ġis Ġquit Ġbefore Ġthe Ġdelivery Ġtime Ġof Ġthe Ġmessage ĊĠĠĠĠ Ġ* Ġoccurs Ġthen Ġthe Ġmessage Ġwill Ġbe Ġdropped . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpost Delayed ( r : ĠRunnable , Ġdelay Millis : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. post Delayed ( wrap Runnable ( r ), Ġdelay Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPosts Ġa Ġmessage Ġto Ġan Ġobject Ġthat Ġimplements ĠRunnable . ĊĠĠĠĠ Ġ* ĠCause s Ġthe ĠRunnable Ġr Ġto Ġexecuted Ġon Ġthe Ġnext Ġiteration Ġthrough Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . ĠThe Ġrunnable Ġwill Ġbe Ġrun Ġon Ġthe Ġthread Ġto Ġwhich Ġthis ĊĠĠĠĠ Ġ* Ġhandler Ġis Ġattached . ĊĠĠĠĠ Ġ* Ġ** This Ġmethod Ġis Ġonly Ġfor Ġuse Ġin Ġvery Ġspecial Ġcircumstances Ġ-- Ġit ĊĠĠĠĠ Ġ* Ġcan Ġeasily Ġstar ve Ġthe Ġmessage Ġqueue , Ġcause Ġordering Ġproblems , Ġor Ġhave ĊĠĠĠĠ Ġ* Ġother Ġunexpected Ġside - effects .** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġr ĠThe ĠRunnable Ġthat Ġwill Ġbe Ġexecuted . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe Ġmessage Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpost At Front Of Queue ( r : ĠRunnable ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. post At Front Of Queue ( wrap Runnable ( r )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġany Ġpending Ġposts Ġof ĠRunnable Ġr Ġthat Ġare Ġin Ġthe Ġmessage Ġqueue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Callbacks ( r : ĠRunnable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrunnable Ġ= Ġm Run n ables . remove ( r ) ĊĠĠĠĠĠĠĠ Ġif Ġ( run nable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Exec !!. remove Callbacks ( run nable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġany Ġpending Ġposts Ġof ĠRunnable Ġ< var > r </ var > Ġwith ĠObject ĊĠĠĠĠ Ġ* Ġ< var > token </ var > Ġthat Ġare Ġin Ġthe Ġmessage Ġqueue . Ġ ĠIf Ġ< var > token </ var > Ġis Ġnull , ĊĠĠĠĠ Ġ* Ġall Ġcallbacks Ġwill Ġbe Ġremoved . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Callbacks ( r : ĠRunnable , Ġtoken : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrunnable Ġ= Ġm Run n ables . remove ( r ) ĊĠĠĠĠĠĠĠ Ġif Ġ( run nable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Exec !!. remove Callbacks ( run nable , Ġtoken ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠP ushes Ġa Ġmessage Ġonto Ġthe Ġend Ġof Ġthe Ġmessage Ġqueue Ġafter Ġall Ġpending Ġmessages ĊĠĠĠĠ Ġ* Ġbefore Ġthe Ġcurrent Ġtime . ĠIt Ġwill Ġbe Ġreceived Ġin Ġcallback , ĊĠĠĠĠ Ġ* Ġin Ġthe Ġthread Ġattached Ġto Ġthis Ġhandler . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe Ġmessage Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsendMessage ( msg : ĠMessage ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. sendMessage ( msg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa ĠMessage Ġcontaining Ġonly Ġthe Ġwhat Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe Ġmessage Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend Empty Message ( what : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. send Empty Message ( what ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa ĠMessage Ġcontaining Ġonly Ġthe Ġwhat Ġvalue , Ġto Ġbe Ġdelivered ĊĠĠĠĠ Ġ* Ġafter Ġthe Ġspecified Ġamount Ġof Ġtime Ġel ap ses . ĊĠĠĠĠ Ġ* Ġ@ see Ġ. sendMessage Delayed ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe Ġmessage Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend Empty Message Delayed ( what : ĠInt , Ġdelay Millis : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. send Empty Message Delayed ( what , Ġdelay Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa ĠMessage Ġcontaining Ġonly Ġthe Ġwhat Ġvalue , Ġto Ġbe Ġdelivered ĊĠĠĠĠ Ġ* Ġat Ġa Ġspecific Ġtime . ĊĠĠĠĠ Ġ* Ġ@ see Ġ. sendMessage At Time ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe Ġmessage Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend Empty Message At Time ( what : ĠInt , Ġu ptime Millis : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. send Empty Message At Time ( what , Ġu ptime Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEn queue Ġa Ġmessage Ġinto Ġthe Ġmessage Ġqueue Ġafter Ġall Ġpending Ġmessages ĊĠĠĠĠ Ġ* Ġbefore Ġ( current Ġtime Ġ+ Ġdelay Millis ). ĠYou Ġwill Ġreceive Ġit Ġin ĊĠĠĠĠ Ġ* Ġcallback , Ġin Ġthe Ġthread Ġattached Ġto Ġthis Ġhandler . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe Ġmessage Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . Ġ ĠNote Ġthat Ġa ĊĠĠĠĠ Ġ* Ġresult Ġof Ġtrue Ġdoes Ġnot Ġmean Ġthe Ġmessage Ġwill Ġbe Ġprocessed Ġ-- Ġif ĊĠĠĠĠ Ġ* Ġthe Ġlo oper Ġis Ġquit Ġbefore Ġthe Ġdelivery Ġtime Ġof Ġthe Ġmessage ĊĠĠĠĠ Ġ* Ġoccurs Ġthen Ġthe Ġmessage Ġwill Ġbe Ġdropped . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsendMessage Delayed ( msg : ĠMessage , Ġdelay Millis : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. sendMessage Delayed ( msg , Ġdelay Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEn queue Ġa Ġmessage Ġinto Ġthe Ġmessage Ġqueue Ġafter Ġall Ġpending Ġmessages ĊĠĠĠĠ Ġ* Ġbefore Ġthe Ġabsolute Ġtime Ġ( in Ġmilliseconds ) Ġ< var > uptime Millis </ var >. ĊĠĠĠĠ Ġ* Ġ** The Ġtime - base Ġis Ġ[ android . os . System Clock . uptime Millis ]. ** ĊĠĠĠĠ Ġ* ĠYou Ġwill Ġreceive Ġit Ġin Ġcallback , Ġin Ġthe Ġthread Ġattached ĊĠĠĠĠ Ġ* Ġto Ġthis Ġhandler . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġu ptime Millis ĠThe Ġabsolute Ġtime Ġat Ġwhich Ġthe Ġmessage Ġshould Ġbe ĊĠĠĠĠ Ġ* Ġdelivered , Ġusing Ġthe ĊĠĠĠĠ Ġ* Ġ[ android . os . System Clock . uptime Millis ] Ġtime - base . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe Ġmessage Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . Ġ ĠNote Ġthat Ġa ĊĠĠĠĠ Ġ* Ġresult Ġof Ġtrue Ġdoes Ġnot Ġmean Ġthe Ġmessage Ġwill Ġbe Ġprocessed Ġ-- Ġif ĊĠĠĠĠ Ġ* Ġthe Ġlo oper Ġis Ġquit Ġbefore Ġthe Ġdelivery Ġtime Ġof Ġthe Ġmessage ĊĠĠĠĠ Ġ* Ġoccurs Ġthen Ġthe Ġmessage Ġwill Ġbe Ġdropped . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsendMessage At Time ( msg : ĠMessage , Ġu ptime Millis : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. sendMessage At Time ( msg , Ġu ptime Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEn queue Ġa Ġmessage Ġat Ġthe Ġfront Ġof Ġthe Ġmessage Ġqueue , Ġto Ġbe Ġprocessed Ġon ĊĠĠĠĠ Ġ* Ġthe Ġnext Ġiteration Ġof Ġthe Ġmessage Ġloop . Ġ ĠYou Ġwill Ġreceive Ġit Ġin ĊĠĠĠĠ Ġ* Ġcallback , Ġin Ġthe Ġthread Ġattached Ġto Ġthis Ġhandler . ĊĠĠĠĠ Ġ* Ġ** This Ġmethod Ġis Ġonly Ġfor Ġuse Ġin Ġvery Ġspecial Ġcircumstances Ġ-- Ġit ĊĠĠĠĠ Ġ* Ġcan Ġeasily Ġstar ve Ġthe Ġmessage Ġqueue , Ġcause Ġordering Ġproblems , Ġor Ġhave ĊĠĠĠĠ Ġ* Ġother Ġunexpected Ġside - effects .** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe Ġmessage Ġwas Ġsuccessfully Ġplaced Ġin Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . Ġ ĠReturns Ġfalse Ġon Ġfailure , Ġusually Ġbecause Ġthe ĊĠĠĠĠ Ġ* Ġlo oper Ġprocessing Ġthe Ġmessage Ġqueue Ġis Ġexiting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsendMessage At Front Of Queue ( msg : ĠMessage ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. sendMessage At Front Of Queue ( msg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġany Ġpending Ġposts Ġof Ġmessages Ġwith Ġcode Ġ' what ' Ġthat Ġare Ġin Ġthe ĊĠĠĠĠ Ġ* Ġmessage Ġqueue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Messages ( what : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Exec !!. remove Messages ( what ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġany Ġpending Ġposts Ġof Ġmessages Ġwith Ġcode Ġ' what ' Ġand Ġwhose Ġobj Ġis ĊĠĠĠĠ Ġ* Ġ' object ' Ġthat Ġare Ġin Ġthe Ġmessage Ġqueue . Ġ ĠIf Ġ< var > object </ var > Ġis Ġnull , ĊĠĠĠĠ Ġ* Ġall Ġmessages Ġwill Ġbe Ġremoved . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Messages ( what : ĠInt , Ġ` object `: ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Exec !!. remove Messages ( what , Ġ` object `) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġany Ġpending Ġposts Ġof Ġcallbacks Ġand Ġsent Ġmessages Ġwhose ĊĠĠĠĠ Ġ* Ġ< var > obj </ var > Ġis Ġ< var > token </ var >. Ġ ĠIf Ġ< var > token </ var > Ġis Ġnull , ĊĠĠĠĠ Ġ* Ġall Ġcallbacks Ġand Ġmessages Ġwill Ġbe Ġremoved . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Callbacks And Messages ( token : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Exec !!. remove Callbacks And Messages ( token ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthere Ġare Ġany Ġpending Ġposts Ġof Ġmessages Ġwith Ġcode Ġ' what ' Ġin ĊĠĠĠĠ Ġ* Ġthe Ġmessage Ġqueue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Messages ( what : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. has Messages ( what ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthere Ġare Ġany Ġpending Ġposts Ġof Ġmessages Ġwith Ġcode Ġ' what ' Ġand ĊĠĠĠĠ Ġ* Ġwhose Ġobj Ġis Ġ' object ' Ġin Ġthe Ġmessage Ġqueue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Messages ( what : ĠInt , Ġ` object `: ĠAny ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Exec !!. has Messages ( what , Ġ` object `) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrap Runnable ( r : ĠRunnable ?): ĠWeak Runnable Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( r Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" Runnable Ġcan 't Ġbe Ġnull ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhard Ref Ġ= ĠCh ained Ref ( m Lock , Ġr ) ĊĠĠĠĠĠĠĠ Ġm Run n ables . insert After ( hard Ref ) ĊĠĠĠĠĠĠĠ Ġreturn Ġhard Ref . wrapper ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠExec Handler Ġ: ĠHandler Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Callback : ĠWeak Reference < Handler . Callback >? ĊĊĠĠĠĠĠĠĠ Ġinternal Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġconstructor ( callback : ĠWeak Reference < Handler . Callback >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġconstructor ( lo oper : ĠL ooper ) Ġ: Ġsuper ( lo oper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġconstructor ( lo oper : ĠL ooper , Ġcallback : ĠWeak Reference < Handler . Callback >) Ġ: Ġsuper ( lo oper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġm Callback . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ// ĠAlready Ġdisposed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . handle Message ( msg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠWeak Runnable ( private Ġval Ġm Delegate : ĠWeak Reference < Runnable >, Ġprivate Ġval Ġm Reference : ĠWeak Reference < Chain ed Ref >) Ġ: ĠRunnable Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelegate Ġ= Ġm Delegate . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġm Reference . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreference ?. remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate ?. run () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠCh ained Ref ( var Ġlock : ĠLock , Ġval Ġrunnable : ĠRunnable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnext : ĠCh ained Ref ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġprev : ĠCh ained Ref ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġwrapper : ĠWeak Runnable ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . wrapper Ġ= ĠWeak Runnable ( if Ġ( run nable != null ) Weak Reference ( run nable ) Ġelse ĠWeak Reference ( Runnable Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}), ĠWeak Reference ( this )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġremove (): ĠWeak Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev !!. next Ġ= Ġnext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext !!. prev Ġ= Ġprev ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwrapper ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġinsert After ( candidate : ĠCh ained Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . next !!. prev Ġ= Ġcandidate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidate . next Ġ= Ġthis . next ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . next Ġ= Ġcandidate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidate . prev Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġremove ( obj : ĠRunnable ): ĠWeak Runnable ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurr Ġ= Ġthis . next Ġ// ĠSk ipping Ġhead ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( curr Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( curr . run nable Ġ=== Ġobj ) Ġ{ Ġ// ĠWe Ġdo Ġcomparison Ġexactly Ġhow ĠHandler Ġdoes Ġinside ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurr . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Ġ= Ġcurr . next ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }