package Ġcom . ae se an . activity stack . utils Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Printer Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . lang . reflect . Modifier ĊĊ Ċ private Ġconst Ġval ĠDIS PATCH ING _ KEY Ġ= Ġ" >> >>> ĠDispatch ing Ġto Ġ" Ċ private Ġconst Ġval ĠFIN ISHED _ KEY Ġ= Ġ" <<<< < ĠFinished Ġto Ġ" Ċ Ċ private Ġfun ĠString . find Target End Index (): ĠInt ? Ġ{ ĊĠĠĠ Ġif Ġ( this . startsWith ( DISPATCH ING _ KEY )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġend Key Ġ= Ġ": Ġ" ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . lastIndexOf ( end Key ) Ġ+ Ġend Key . length ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ private Ġfun ĠString . find Handler End Index (): ĠInt ? Ġ{ ĊĠĠĠ Ġval Ġend Key Ġ= Ġ" }" ĊĠĠĠ Ġreturn Ġthis . indexOf ( end Key ). take If Ġ{ Ġit Ġ>= Ġ 0 Ġ} ?. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis Ġ+ Ġend Key . length ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠString . to What (): ĠString ? Ġ{ ĊĠĠĠ Ġreturn Ġthis . find Target End Index ()?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġsubstring ( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠString . to Callback (): ĠString ? Ġ{ ĊĠĠĠ Ġif Ġ( this . startsWith ( DISPATCH ING _ KEY )) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Handler End Index ()?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Key Ġ= Ġ": Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . substring ( it Ġ+ Ġ" Ġ". length , Ġthis . lastIndexOf ( end Key )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( this . startsWith ( FINISHED _ KEY )) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Handler End Index ()?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . substring ( it Ġ+ Ġ" Ġ". length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ private Ġfun ĠString . to Target ClassName (): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġprefix Ġ= Ġ" Handler Ġ(" ĊĠĠĠ Ġthis . indexOf ( prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit Ġ>= Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . substring ( it Ġ+ Ġprefix . length , Ġthis . lastIndexOf (" ) ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ private Ġfun ĠString . to Target (): ĠString ? Ġ{ ĊĠĠĠ Ġfun Ġfind ( key : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . startsWith ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġkey . length ĊĠĠĠĠĠĠĠ Ġval Ġend Key Ġ= Ġ" }" ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . substring ( offset , Ġthis . indexOf ( end Key , Ġoffset ) Ġ+ Ġend Key . length ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfind ( DISPATCH ING _ KEY )?. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġfind ( FINISHED _ KEY )?. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } ĊĊ Ċ fun Ġto Name ( clazz : ĠClass <* >, Ġvalue : ĠInt ): ĠString ? Ġ{ ĊĠĠĠ Ġreturn Ġto Name ( clazz , Ġvalue , ĠModifier . FINAL ) Ċ } Ċ Ċ fun Ġto Name ( clazz : ĠClass <* >, Ġvalue : ĠInt , Ġmodifiers : ĠInt ): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġm Ġ= Ġmodifiers Ġor ĠModifier . STATIC ĊĠĠĠ Ġfor Ġ( field Ġin Ġclazz . declared Fields ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( field . modifiers Ġand Ġm ) Ġ== Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġfield . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠInt :: class . java Ġ|| Ġtype Ġ== ĠInteger . TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġfield . get ( null ) Ġas ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ"" Ċ } Ċ Ċ private Ġval Ġdefault Filter Array Ġ= ĠarrayOf (" android . app . ActivityThread \$ H " ĊĠĠĠĠĠĠĠ Ġ, Ġ" android . view . View Root Impl \$ View Root Handler " ĊĠĠĠĠĠĠĠ Ġ, Ġ" com . android . internal . view . I Input Connection Wrapper \$ My Handler ") Ċ Ċ private Ġval Ġdefault Filter : Ġ( s : ĠString ) Ġ-> ĠBoolean Ġ= Ġ{ Ġs Ġ-> ĊĠĠĠ Ġ// ĠĠĠ Ġvar Ġresult Ġ= Ġfalse Ċ // ĠĠĠ Ġfor Ġ( f Ġin Ġdefault Filter Array ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( s . contains ( f )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbreak Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġresult ĊĠĠĠ Ġtrue Ċ } Ċ Ċ private Ġval Ġdefault Map : ĠMap < String , ĠClass <* >> Ġ= Ġmap Of ( Pair (" android . app . ActivityThread \$ H ", ĠActivity Thread H :: class . java ), ĊĠĠĠĠĠĠĠ ĠPair (" android . view . View Root Impl \$ View Root Handler ", ĠView Root Handler :: class . java ), ĊĠĠĠĠĠĠĠ ĠPair (" com . android . internal . view . I Input Connection Wrapper \$ My Handler ", ĠI Input Connection Wrapper :: class . java ), ĊĠĠĠĠĠĠĠ ĠPair (" android . view . Ch oreo grapher \$ Frame Handler ", ĠFrame Handler H :: class . java ), ĊĠĠĠĠĠĠĠ ĠPair (" android . hardware . display . Display Manager Global \$ Display Listener Delegate ", ĠDisplay Listener Delegate H :: class . java ), ĊĠĠĠĠĠĠĠ ĠPair (" android . view . input method . Input Method Manager \$ H ", ĠInput Method Manager H :: class . java )) Ċ Ċ class ĠHandler Printer ( private Ġval Ġtag : ĠString Ġ= Ġ" Handler Printer " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġval Ġfilter : Ġ( s : ĠString ) Ġ-> ĠBoolean Ġ= Ġdefault Filter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġval Ġclass Map : ĠMap < String , ĠClass <* >> Ġ= Ġdefault Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġval Ġlo oper Proxy : ĠL ooper Proxy ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( lo oper Proxy : ĠL ooper Proxy ): ĠHandler Printer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHandler Printer ( lo oper Proxy Ġ= Ġlo oper Proxy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( tag , Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmap : ĠMutable Map < String , ĠInt > Ġ= ĠHashMap () ĊĠĠĠ Ġprivate Ġval Ġlist Ġ= ĠArrayList < Mutable Map < String , ĠString >>() ĊĊĠĠĠ Ġfun Ġregister ( key : ĠString , Ġclazz : ĠClass <* >, Ġmodifiers : ĠInt Array Ġ= Ġint ArrayOf ( Modifier . FINAL Ġor ĠModifier . STATIC Ġor ĠModifier . PRIVATE , ĠModifier . FINAL Ġor ĠModifier . STATIC Ġor ĠModifier . PUBLIC )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġmap [ key ] ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Map ( list [ index ], Ġclazz , Ġmodifiers ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġlist . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( generate Map ( HashMap (), Ġclazz , Ġmodifiers )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ key ] Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Map ( map : ĠMutable Map < String , ĠString > ?, Ġclazz : ĠClass <* >, Ġmodifiers : ĠInt Array ): ĠMutable Map < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmap Ġ?: ĠHashMap () ĊĠĠĠĠĠĠĠ Ġfun Ġgenerate ( fields : ĠArray < Field >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġfields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( modifier Ġin Ġmodifiers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . modifiers Ġ== Ġmodifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj : ĠAny ? Ġ= Ġfield . get ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ obj . toString ()] Ġ= Ġfield . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgenerate ( clazz . declared Fields ) ĊĠĠĠĠĠĠĠ Ġgenerate ( clazz . fields ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget ( key : ĠString , Ġname : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġmap [ key ] ĊĠĠĠĠĠĠĠ Ġindex ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist [ this ][ name ]. toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass Map . entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġit . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlo oper Proxy . addMessage Logging Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter ( x )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġx . to Target ClassName () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( x Ġ+ Ġ" Ġ" Ġ+ Ġget ( key , Ġx . to What (). toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠPrinter Proxy Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġset Message Logging ( printer : ĠPrinter ) ĊĠĠĠ Ġ} Ċ }