package Ġcom . k ier on qu inn . app . discover kill er . components . x posed . apps Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Service Ċ import Ġandroid . content .* Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics .* Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . view . Window Insets Compat Ċ import Ġandroidx . core . view . update Padding Ċ import Ġcom . k ier on qu inn . app . discover kill er . components . intent for warder . Intent For warder Ċ import Ġcom . k ier on qu inn . app . discover kill er . components . settings . Remote Settings Ċ import Ġcom . k ier on qu inn . app . discover kill er . model . Remote Settings Holder Ċ import Ġcom . k ier on qu inn . app . discover kill er . ui . controllers . Discover K iller Overlay Controller Ċ import Ġcom . k ier on qu inn . app . discover kill er . ui . screens . overlay . snapshot . Snapshot Overlay Ċ import Ġcom . k ier on qu inn . app . discover kill er . utils . extensions .* Ċ import Ġcom . k ier on qu inn . mon et compat . core . Mon et Compat Ċ import Ġde . rob v . android . x posed . XC _ Method Hook Ċ import Ġde . rob v . android . x posed . X posed Helpers Ċ import Ġde . rob v . android . x posed . callbacks . XC _ Load Package Ċ import Ġjava . io . FileDescriptor Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . lang . reflect . Field Ċ import Ġkotlin . system . exit Process ĊĊ Ċ /** Ċ Ġ* Ġ ĠHooks Ġfor Ġthe ĠGoogle ĠApp Ġ/ Ġgoogle quick search box Ċ Ġ* Ċ Ġ* Ġ ĠNow Ġwith Ġno Ġob fuscated Ġnames ! Ċ Ġ*/ Ċ class ĠGoogle App : ĠX posed App ( PACKAGE _ NAME ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPACK AGE _ NAME Ġ= Ġ" com . google . android . google quick search box " ĊĊĠĠĠĠĠĠĠ Ġ// Indic ates Ġan Ġactivity Ġhas Ġbeen Ġstarted Ġfrom ĠDis cover K iller ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTENT _ KEY _ FROM _ DIS COVER _ K IL LER Ġ= Ġ" from _ discover _ kill er " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ RE LOAD _ SNAPSHOT Ġ= Ġ"$ PACKAGE _ NAME . RE LOAD _ SNAPSHOT " ĊĊĠĠĠĠĠĠĠ Ġ// Zero State Ġ= ĠSnapshot , ĠEnter Op a Ġis Ġrequired Ġto Ġlaunch Ġit Ġproperly ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠZERO _ STATE _ CLASS _ NAME Ġ= Ġ" com . google . android . apps . g sa . static plugins . op a . Zero State Activity " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠENTER _ OP A _ CLASS _ NAME Ġ= Ġ" com . google . android . apps . g sa . static plugins . op a . Enter Op a Activity " ĊĊĠĠĠĠĠĠĠ Ġ// ĠGoogle Ġapp Ġdark Ġtext Ġcolors Ġ( primary / secondary ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠQU ANT UM _ GRE Y _ 9 0 0 Ġ= ĠColor . parse Color ("# ff 2 1 2 1 2 1 ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠGOOGLE _ GRE Y _ 9 0 0 Ġ= ĠColor . parse Color ("# ff 2 0 2 1 2 4 ") ĊĊĠĠĠĠĠĠĠ Ġ// Google Ġapp Ġlight Ġsecondary Ġcolor Ġ( primary Ġ= Ġwhite ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠGOOGLE _ GRE Y _ LIGHT Ġ= ĠColor . parse Color ("# f 1 f 3 f 4 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġdiscover K iller Overlay Controller : ĠDis cover K iller Overlay Controller ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Discover Activity Showing Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġremote Settings : ĠRemote Settings Holder ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġmon et Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMon et Compat . getInstance () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon App Loaded ( lp param : ĠX C _ Load Package . Load Package Param ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Drawer Overlay Service Hooks ( lp param ) ĊĠĠĠĠĠĠĠ Ġsetup Zero State Hooks ( lp param ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠHooks Ġcalls Ġin ĠDraw er Overlay Service , Ġwith Ġthe Ġfollowing Ġlogic : ĊĠĠĠĠ Ġ* Ġ Ġ* ĠonCreate : ĠKeep Ġoriginal Ġcall , Ġcreate Ġ[ Discover K iller Overlay Controller ] Ġafter Ġcall ĊĠĠĠĠ Ġ* Ġ Ġ* Ġon Bind : ĠReplace Ġoriginal Ġcall , Ġcall Ġ[ Discover K iller Overlay Controller . on Bind ] Ġand Ġreturn Ġthe Ġ[ IB inder ] ĊĠĠĠĠ Ġ* Ġ Ġ* Ġon Un bind : ĠReplace Ġoriginal Ġcall , Ġcall Ġ[ Discover K iller Overlay Controller . on Un bind ] Ġand Ġreturn Ġ` true ` ĊĠĠĠĠ Ġ* Ġ Ġ* Ġon Destroy : ĠKeep Ġoriginal Ġcall , Ġcall Ġ[ Snapshot Overlay . on Destroy ] Ġafter Ġcall ĊĠĠĠĠ Ġ* Ġ Ġ* Ġdump : ĠReplace Ġoriginal Ġcall , Ġcall Ġ[ Discover K iller Overlay Controller . dump ] Ġand Ġreturn Ġthe Ġresponse ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ĠIf Ġ[ Remote Settings Holder . overlay Enabled ] Ġis Ġset Ġto Ġ` false `, Ġno Ġcontroller Ġcalls Ġwill Ġbe Ġmade Ġand Ġthe Ġdefault ĊĠĠĠĠ Ġ* Ġ Ġservice Ġwill Ġbe Ġused Ġinstead . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ĠWe Ġcan 't Ġsimply Ġreplace Ġall Ġthe Ġcalls Ġas Ġthere Ġare Ġsuper Ġcalls Ġinvolved Ġwhich Ġbreak Ġthe Ġservice Ġif Ġnot Ġcalled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Drawer Overlay Service Hooks ( lp param : ĠX C _ Load Package . Load Package Param ){ ĊĠĠĠĠĠĠĠ Ġval Ġoverlay Class Ġ= ĠX posed Helpers . find Class (" com . google . android . apps . g sa . now overlay service . Drawer Overlay Service ", Ġlp param . class Loader ) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( overlay Class , Ġ" onCreate ", Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġparam . this Object Ġas ĠService ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Settings Ġ= ĠRemote Settings . getInstance (). get Remote Settings ( service ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Google App . remote Settings Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( remote Settings . overlay Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiscover K iller Overlay Controller Ġ= ĠDis cover K iller Overlay Controller ( service , Ġremote Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( overlay Class , Ġ" on Bind ", ĠIntent :: class . java , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( remote Settings ?. overlay Enabled Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdiscover K iller Overlay Controller ?. on Bind ( param . args [ 0 ] Ġas ĠIntent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . result Ġ= Ġresult Ġas ĠI Binder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( overlay Class , Ġ" on Un bind ", ĠIntent :: class . java , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( remote Settings ?. overlay Enabled Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiscover K iller Overlay Controller ?. on Un bind ( param . args [ 0 ] Ġas ĠIntent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . result Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( overlay Class , Ġ" on Destroy ", Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( remote Settings ?. overlay Enabled Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiscover K iller Overlay Controller ?. on Destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Settings Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( overlay Class , Ġ" dump ", ĠFile Descriptor :: class . java , ĠPrintWriter :: class . java , ĠArray < String >:: class . java , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( remote Settings ?. overlay Enabled Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiscover K iller Overlay Controller ?. dump ( param . args [ 1 ] Ġas ĠPrintWriter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . result Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Zero State Hooks ( lp param : ĠX C _ Load Package . Load Package Param ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Zero State Window Hooks () ĊĠĠĠĠĠĠĠ Ġsetup Zero State State Hooks ( lp param ) ĊĠĠĠĠĠĠĠ Ġsetup Zero State Color Hooks () ĊĠĠĠĠĠĠĠ Ġsetup Zero State Activity Start Hooks ( lp param ) ĊĠĠĠĠĠĠĠ Ġsetup Zero State Refresh Listener Hooks ( lp param ) ĊĠĠĠĠĠĠĠ Ġsetup Zero State Recycler Hooks ( lp param ) ĊĠĠĠĠĠĠĠ Ġsetup Zero State ImageView Hooks () ĊĠĠĠĠĠĠĠ Ġsetup Zero State Background Hooks ( lp param ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠRe places Ġthe Ġcall Ġto Ġ[ Context . getSystem Service ] Ġpassing Ġ[ Context . WINDOW _ SERVICE ] Ġwith ĊĠĠĠĠ Ġ* Ġ Ġthe Ġoverlay ĠWindow Manager , Ġwhen Ġthe Ġactivity Ġis ĠZero State Ġor ĠEnter Op a . ĊĠĠĠĠ Ġ* Ġ ĠThis Ġis Ġrequired Ġas Ġthe Ġoverlay Ġis Ġ** special ** Ġand Ġhas Ġits Ġown ĠWindow Manager , ĊĠĠĠĠ Ġ* Ġ Ġusing Ġthe Ġnormal Ġone Ġwill Ġcrash . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Zero State Window Hooks () Ġ{ ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( Activity :: class . java , Ġ" getSystem Service ", ĠString :: class . java , Ġobject : ĠX C _ Method Hook () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . before Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġparam . this Object :: class . java . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( clazz Ġ!= ĠZERO _ STATE _ CLASS _ NAME Ġ&& Ġclazz Ġ!= ĠENTER _ OP A _ CLASS _ NAME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġparam . this Object Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠserviceName Ġ= Ġparam . args [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( serviceName Ġ== ĠContext . WINDOW _ SERVICE Ġ&& Ġactivity . is From Discover K iller ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwindow Manager Ġ= ĠSnapshot Overlay . get WindowManager () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . result Ġ= Ġwindow Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠStores Ġthe Ġresume Ġstate Ġof ĠZero State Ġfor Ġuse Ġin Ġthem ing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Zero State State Hooks ( lp param : ĠX C _ Load Package . Load Package Param ){ ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( ZERO _ STATE _ CLASS _ NAME , Ġlp param . class Loader , Ġ" on Resume ", Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġparam . this Object Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( activity . is From Discover K iller ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . decor View . remove Status Nav Background On Pre Draw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Discover Activity Showing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( ZERO _ STATE _ CLASS _ NAME , Ġlp param . class Loader , Ġ" on Pause ", Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Discover Activity Showing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠHooks Ġ[ TextView . setTextColor ], Ġreplacing Ġcalls Ġwhere Ġthe Ġ[ QU ANT UM _ GRE Y _ 9 0 0 ] Ġand Ġ[ GOOGLE _ GRE Y _ 9 0 0 ] Ġcolors Ġare Ġbeing Ġlooked Ġup ĊĠĠĠĠ Ġ* Ġ Ġto Ġreturn Ġ[ Color . WHITE ] Ġand Ġ[ GOOGLE _ GRE Y _ LIGHT ] Ġrespectively , Ġwhen Ġthe Ġdark Ġtheme Ġis Ġin Ġuse . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ĠThis Ġis Ġno - op Ġwhen Ġ[ is Discover Activity Showing ] Ġis Ġfalse Ġ( ie . Ġthe Ġoverlay Ġis Ġnot Ġopen ) Ġor Ġif Ġnot Ġin Ġdark Ġtheme . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Zero State Color Hooks () Ġ{ ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( TextView :: class . java , Ġ" setTextColor ", ĠColor State List :: class . java , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . before Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġparam . this Object Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! is Discover Activity Showing ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! textView . context . is Dark Mode ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Colors Ġ= Ġparam . args [ 0 ] Ġas ĠColor State List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextColor Ġ= Ġtext Colors . default Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( textColor Ġ== ĠQU ANT UM _ GRE Y _ 9 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( textView . is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( textColor Ġ== ĠGOOGLE _ GRE Y _ 9 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( textView . is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( GOOGLE _ GRE Y _ LIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠĠ 1 .) ĠHooks Ġ[ Context . startActivity ] Ġ( via ĠContext Impl ), Ġadding Ġ[ INT ENT _ KEY _ FROM _ DIS COVER _ K IL LER ] Ġ= Ġ` true ` Ġwhen Ġstarting ĠZero State , ĊĠĠĠĠ Ġ* Ġ Ġand Ġf iring Ġit Ġon Ġto Ġthe ĠIntent For warder . ĠThis Ġis Ġthen Ġhandled Ġby Ġthe Ġoverlay Ġas Ġa Ġlocal ĠstartActivity , Ġrather Ġthan Ġa Ġproper Ġone . ĊĠĠĠĠ Ġ* Ġ ĠIt 's Ġrequired Ġas ĠEnter Op a Ġstarts Ġsome Ġservices Ġ& Ġsets Ġsome Ġfields Ġthat Ġwhen Ġun - set , Ġcan Ġcause ĠZero State Ġto Ġnot Ġreload Ġproperly . ĊĠĠĠĠ Ġ* Ġ ĠThis Ġis Ġa Ġno - op Ġwhen Ġthere 's Ġno ĠIntent For warder Ġto Ġfire Ġon Ġto . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠ 2 .) ĠHooks Ġ[ Activity . startActivity For Result ], Ġwhen Ġ[ is Discover Activity Showing ] Ġ= Ġ` true ` Ġ( ie . Ġthe Ġoverlay Ġis Ġshowing ), Ġto Ġadd ĊĠĠĠĠ Ġ* Ġ Ġ[ INT ENT _ KEY _ FROM _ DIS COVER _ K IL LER ] Ġ= Ġ` true `. ĠThis Ġis Ġthen Ġused Ġin Ġ 3 .) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠ 3 .) ĠHooks Ġ[ Activity . get Calling Activity ], Ġwhen Ġthe Ġ[ Activity . get Intent ] Ġbundle Ġhas Ġ[ is Discover Activity Showing ] Ġ= Ġ` true `, ĊĠĠĠĠ Ġ* Ġ Ġand Ġreturns Ġ[ ZERO _ STATE _ CLASS _ NAME ] Ġas Ġthe Ġclass . ĠThis Ġfixes Ġlaunch ing Ġactivities Ġfrom Ġthe Ġoverlay , Ġas ĠLocal Activity Manager ĊĠĠĠĠ Ġ* Ġ Ġdoes Ġnot Ġsupport Ġ[ Activity . startActivity For Result ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Zero State Activity Start Hooks ( lp param : ĠX C _ Load Package . Load Package Param ){ ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method (" android . app . Context Impl ", Ġlp param . class Loader , Ġ" startActivity ", ĠIntent :: class . java , ĠBundle :: class . java , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . before Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent For warder . getInstance ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġparam . args [ 0 ] Ġas ĠIntent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( intent . to Uri ( 0 ). startsWith (" google assistant :// zer ost ate ")){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Zero Ġstate Ġintent ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( INT ENT _ KEY _ FROM _ DIS COVER _ K IL LER , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . post Intent ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Prevent Ġactual ĠstartActivity Ġcall ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . result Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( Activity :: class . java , Ġ" startActivity For Result ", ĠIntent :: class . java , ĠInteger . TYPE , ĠBundle :: class . java , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . before Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġparam . args [ 0 ] Ġas ĠIntent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is Discover Activity Showing ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( INT ENT _ KEY _ FROM _ DIS COVER _ K IL LER , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( Activity :: class . java , Ġ" get Calling Activity ", Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġparam . this Object Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( activity . is From Discover K iller ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . result Ġ= ĠComponent Name ( activity , ĠZERO _ STATE _ CLASS _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠApplies Ġtop Ġpadding Ġto ĠZero ĠState 's Ġmain ĠRecyclerView , Ġto Ġallow Ġit Ġto Ġdraw Ġbehind Ġthe ĊĠĠĠĠ Ġ* Ġ Ġstatus Ġbar Ġwithout Ġclipping ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Zero State Recycler Hooks ( lp param : ĠX C _ Load Package . Load Package Param ){ ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Constructor (" android . support . v 7 . widget . RecyclerView ", Ġlp param . class Loader , ĠContext :: class . java , ĠAttributeSet :: class . java , ĠInteger . TYPE , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġparam . this Object Ġas ĠView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . run After Post If Id Matches ({ Ġis Discover Activity Showing Ġ}, " zero _ state _ content _ view ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Apply Insets ( true ) Ġ{ Ġview , Ġin sets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update Padding ( top Ġ= Ġin sets . get Insets ( Window Insets Compat . Type . status Bars ()). top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠT ints Ġthe Ġlight bul b Ġand Ġsettings Ġicons , Ġsets Ġa Ġlong Ġclick Ġof Ġthe Ġprofile Ġicon Ġto Ġrestart Ġthe Ġoverlay ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Zero State ImageView Hooks () Ġ{ ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Constructor ( ImageView :: class . java , ĠContext :: class . java , ĠAttributeSet :: class . java , ĠInteger . TYPE , ĠInteger . TYPE , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġparam . this Object Ġas ĠView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . run After Post If Id Matches ({ Ġis Discover Activity Showing Ġ}, " context ual _ greeting _ profile _ icon ") Ġ{ Ġprofile Icon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Icon . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . run After Post If Id Matches ({ Ġis Discover Activity Showing Ġ&& Ġremote Settings ?. use Mon et Ġ== Ġtrue Ġ}, " context ual _ greeting _ updates _ center _ entrypoint ", Ġ" generic _ stacked _ cards _ section _ custom ization _ icon ", Ġ" zero _ state _ input _ plate _ lens _ icon ", Ġ" zero _ state _ input _ plate _ keyboard _ icon "){ Ġimage view Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage view Ġas ĠImageView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage view . image Tint List Ġ= ĠColor State List . valueOf ( mon et . get Accent Color ( view . context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠT ints Ġthe Ġbackground s Ġof Ġthe ĠF AB Ġand Ġbottom Ġp ill Ġto Ġmon et Ġbackground Ġsecondary Ġif Ġenabled , ĊĠĠĠĠ Ġ* Ġ Ġand Ġdisables Ġelevation Ġon Ġthe Ġcards Ġif Ġmon et Ġis Ġenabled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Zero State Background Hooks ( lp param : ĠX C _ Load Package . Load Package Param ) Ġ{ ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Constructor ( Frame Layout :: class . java , ĠContext :: class . java , ĠAttributeSet :: class . java , ĠInteger . TYPE , ĠInteger . TYPE , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġparam . this Object Ġas ĠView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . run After Post If Id Matches ({ Ġis Discover Activity Showing Ġ&& Ġremote Settings ?. use Mon et Ġ== Ġtrue Ġ}, " zero _ state _ input _ plate _ inner _ container ") Ġ{ Ġcontainer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmon et Ġ= ĠMon et Compat . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . background . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= Ġthis :: class . java . declared Fields . first OrNull Ġ{ Ġit . type Ġ== ĠPaint :: class . java Ġ} !!. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. get ( this ) Ġas ĠPaint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġmon et . get BackgroundColor Secondary ( view . context ) Ġ?: Ġmon et . get BackgroundColor ( view . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Constructor ( Image Button :: class . java , ĠContext :: class . java , ĠAttributeSet :: class . java , ĠInteger . TYPE , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġparam . this Object Ġas ĠView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . run After Post If Id Matches ({ Ġis Discover Activity Showing Ġ&& Ġremote Settings ?. use Mon et Ġ== Ġtrue Ġ}, " zero _ state _ fab "){ Ġfab Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab . background Tint List Ġ= ĠColor State List . valueOf ( mon et . get BackgroundColor Secondary ( view . context ) Ġ?: Ġmon et . get BackgroundColor ( view . context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Constructor (" com . facebook . l ith o . L ith o View ", Ġlp param . class Loader , ĠContext :: class . java , ĠAttributeSet :: class . java , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġparam . this Object Ġas ĠView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . run After Post If Id Matches ({ Ġis Discover Activity Showing Ġ&& Ġremote Settings ?. use Mon et Ġ== Ġtrue Ġ}, " zero _ state _ eml _ card "){ Ġcard Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard . elevation Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠĠ 1 .) ĠHooks ĠZero State Ġ[ Activity . onCreate ] Ġto Ġregister Ġa Ġsecure Ġbroadcast Ġreceiver Ġfor Ġthe Ġ[ ACTION _ RE LOAD _ SNAPSHOT ] Ġaction , Ġand Ġstores Ġthat Ġthe Ġactivity Ġhas Ġstarted ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠ 2 .) ĠHooks ĠSw ipe Refresh Layout Ġcreation Ġto Ġstore Ġthe Ġview , Ġwhen Ġthe Ġprevious Ġstored Ġvalue Ġis Ġset Ġto Ġ` true ` Ġ( ie . Ġthe Ġoverlay Ġis Ġbeing Ġcreated ) ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠThis Ġis Ġa Ġno - op Ġwhen Ġthe Ġvalue Ġis Ġ` false `, Ġand Ġresets Ġit Ġto Ġ` false ` Ġif Ġrequired . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠ 3 .) ĠHooks ĠZero State Ġ[ Activity . on Destroy ] Ġto Ġunregister Ġthe Ġbroadcast Ġreceiver Ġand Ġclear Ġthe Ġstored ĠSw ipe Refresh Layout ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ĠThe Ġ[ Secure Broadcast Receiver ] Ġfinds Ġthe ĠSw ipe Refresh Layout 's Ġ" on Refresh " Ġinterface Ġand Ġinvokes Ġit , Ġcausing Ġa Ġrefresh Ġto Ġtrigger . ĠIf Ġthere 's Ġno ĊĠĠĠĠ Ġ* Ġ Ġstored ĠSw ipe Refresh Layout , Ġthis Ġis Ġa Ġno - op . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Zero State Refresh Listener Hooks ( lp param : ĠX C _ Load Package . Load Package Param ){ ĊĠĠĠĠĠĠĠ Ġvar Ġswipe Refresh Layout : ĠView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġis Waiting For Swipe Refresh Init Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġzero State Refresh Receiver Ġ= ĠSecure Broadcast Receiver Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrefresh Interface Ġ= Ġswipe Refresh Layout ?. get Refresh Interface ()?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn @ let ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrefresh Ġ= Ġrefresh Interface . get ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Interface . type . declared Methods . first (). invoke ( refresh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( ZERO _ STATE _ CLASS _ NAME , Ġlp param . class Loader , Ġ" onCreate ", ĠBundle :: class . java , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . before Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġparam . this Object Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Discover Activity Showing Ġ= Ġactivity . is From Discover K iller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! activity . is From Discover K iller ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Waiting For Swipe Refresh Init Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . register Receiver ( zero State Refresh Receiver , ĠIntent Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ RE LOAD _ SNAPSHOT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Constructor (" android x . swiper ef resh layout . widget . Swipe Refresh Layout ", Ġlp param . class Loader , ĠContext :: class . java , ĠAttributeSet :: class . java , Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . after Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is Waiting For Swipe Refresh Init ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Waiting For Swipe Refresh Init Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout Ġ= Ġparam . this Object Ġas ĠView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠX posed Helpers . find And Hook Method ( ZERO _ STATE _ CLASS _ NAME , Ġlp param . class Loader , Ġ" on Destroy ", Ġobject : ĠX C _ Method Hook (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Hook ed Method ( param : ĠMethod Hook Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . before Hook ed Method ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġparam . this Object Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! activity . is From Discover K iller ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . unregister Receiver ( zero State Refresh Receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠFinds Ġthe Ġ" on Refresh " Ġinterface Ġfor Ġa ĠSw ipe Refresh Layout Ġby Ġsearching Ġfor Ġa Ġfield Ġwith Ġthe Ġfollowing Ġrequirements : ĊĠĠĠĠ Ġ* Ġ Ġ- ĠIt 's Ġan ĠInterface ĊĠĠĠĠ Ġ* Ġ Ġ- ĠIt Ġhas Ġexactly Ġone Ġmethod ĊĠĠĠĠ Ġ* Ġ Ġ- ĠThat Ġone Ġmethod Ġhas Ġexactly Ġ 0 Ġparameters ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ĠThis Ġis Ġsufficient Ġto Ġfind Ġon Refresh Ġand Ġis Ġquick Ġas Ġthere Ġare Ġfew Ġfields Ġin ĠSw ipe Refresh Layout . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠAny . get Refresh Interface (): ĠField ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis :: class . java . declared Fields . first OrNull Ġ{ Ġit . type . is Interface Ġ&& Ġit . type . declared Methods . size Ġ== Ġ 1 Ġ&& Ġit . type . declared Methods [ 0 ]. parameter Count Ġ== Ġ 0 Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠReturns Ġif Ġthe Ġ[ Activity ] Ġhas Ġthe Ġ[ INT ENT _ KEY _ FROM _ DIS COVER _ K IL LER ] Ġ= Ġ` true ` Ġextra ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠActivity . is From Discover K iller ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġintent ?. getBoolean Extra ( INT ENT _ KEY _ FROM _ DIS COVER _ K IL LER , Ġfalse ) Ġ?: Ġfalse Ċ Ċ }