package Ġapp . l awn ch air . q sb Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app widget . App Widget Host View Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Paint Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . core . view . children Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġapp . l awn ch air . Head less Widgets Manager Ċ import Ġapp . l awn ch air . launcher Ċ import Ġapp . l awn ch air . launcher Nullable Ċ import Ġapp . l awn ch air . preferences . Preference Manager Ċ import Ġapp . l awn ch air . util . pending Intent Ċ import Ġapp . l awn ch air . util . recursive Children Ċ import Ġcom . android . launcher 3 . Base Activity Ċ import Ġcom . android . launcher 3 . Device Profile Ċ import Ġcom . android . launcher 3 . Launcher State Ċ import Ġcom . android . launcher 3 . R Ċ import Ġcom . android . launcher 3 . anim . Animator Listeners . for Success Callback Ċ import Ġcom . android . launcher 3 . q sb . Q sb Container View Ċ import Ġcom . android . launcher 3 . util . Themes Ċ import Ġcom . android . launcher 3 . views . Activity Context Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠQ sb Layout ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: ĠFrame Layout ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġactivity : ĠActivity Context Ġ= ĠActivity Context . lookup Context < Base Activity >( context ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġg Icon : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmic Icon : ĠAssistant Icon View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlens Icon : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinner : ĠFrame Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpreference Manager : ĠPreference Manager ĊĠĠĠ Ġprivate Ġvar Ġsearch Pending Intent : ĠPending Intent ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Finish Inf late () ĊĊĠĠĠĠĠĠĠ Ġg Icon Ġ= ĠView Compat . require ViewById < ImageView >( this , ĠR . id . g _ icon ) ĊĠĠĠĠĠĠĠ Ġmic Icon Ġ= ĠView Compat . require ViewById ( this , ĠR . id . mic _ icon ) ĊĠĠĠĠĠĠĠ Ġlens Icon Ġ= ĠView Compat . require ViewById ( this , ĠR . id . lens _ icon ) ĊĠĠĠĠĠĠĠ Ġinner Ġ= ĠView Compat . require ViewById ( this , ĠR . id . inner ) ĊĠĠĠĠĠĠĠ Ġpreference Manager Ġ= ĠPreference Manager . getInstance ( context ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch Package Ġ= Ġget Search PackageName ( context ) ĊĠĠĠĠĠĠĠ ĠsetUp Main Search ( search Package ) ĊĠĠĠĠĠĠĠ ĠsetUp Background () ĊĠĠĠĠĠĠĠ Ġclip Icon R ipp les () ĊĊĠĠĠĠĠĠĠ Ġval Ġis Google Ġ= Ġsearch Package Ġ== ĠGOOGLE _ PACKAGE ĊĠĠĠĠĠĠĠ Ġpreference Manager . the med Hot seat Q sb . subscribe Values ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset The med ( it , Ġis Google ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Google ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Lens Icon () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmic Icon . setIcon ( is Google Ġ= Ġfalse , Ġthe med Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( g Icon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Resource ( R . drawable . ic _ q sb _ search ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Color Filter ( Themes . getColor Accent ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Search Widget ( search Package : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= ĠQ sb Container View . get Search Widget Provider Info ( context , Ġsearch Package ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġcontext . launcher Nullable ?. lifecycle Scope ?. launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhead less Widgets Manager Ġ= ĠHead less Widgets Manager . INSTANCE . get ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhead less Widgets Manager . subscribe Updates ( info , Ġ" hot seat Widget Id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġfind Search Intent ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Search Intent ( view : ĠApp Widget Host View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . measure ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . make Measure Spec ( 1 0 0 0 , ĠMeasure Spec . EX ACT LY ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . make Measure Spec ( 1 0 0 , ĠMeasure Spec . EX ACT LY ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsearch Pending Intent Ġ= Ġview . recursive Children ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . pending Intent Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Descending Ġ{ Ġit . meas ured Width Ġ* Ġit . meas ured Height Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . pending Intent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequested Width Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdp Ġ= Ġactivity . device Profile ĊĠĠĠĠĠĠĠ Ġval Ġcell Width Ġ= ĠDevice Profile . calculate Cell Width ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdp . cell Layout Border Spacing Px , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdp . num Shown Hot seat Icons ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġicon Size Ġ= Ġ( dp . icon Size Px Ġ* Ġ 0 . 9 2 f ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġwidth Reduction Ġ= Ġcell Width Ġ- Ġicon Size ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġrequested Width Ġ- Ġwidth Reduction ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( width , Ġheight ) ĊĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Child With Margins ( child , Ġwidth Measure Spec , Ġwidth Reduction , Ġheight Measure Spec , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset The med ( the med : ĠBoolean , Ġtheme Q sb Icons : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUp Background ( the med ) ĊĠĠĠĠĠĠĠ Ġif Ġ( theme Q sb Icons ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Icon . set The med Icon Resource ( R . drawable . ic _ super _ g _ color , Ġthe med ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmic Icon . setIcon ( is Google Ġ= Ġtrue , Ġthe med ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlens Icon . set The med Icon Resource ( R . drawable . ic _ lens _ color , Ġthe med ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Main Search ( search Package : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribe Search Widget ( search Package ) ĊĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= Ġsearch Pending Intent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pending Intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlauncher Ġ= Ġcontext . launcher ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlauncher . start Intent Sender ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Intent . intent Sender , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (" android . search . action . GLOBAL _ SEARCH ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Package ( search Package ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . package Manager . resolve Activity ( intent , Ġ 0 ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlauncher Ġ= Ġcontext . launcher ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlauncher . state Manager . goTo State ( Launcher State . ALL _ APPS , Ġtrue , Ġfor Success Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlauncher . apps View . search Ui Manager . edit Text ?. show Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Lens Icon () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlens Intent Ġ= ĠIntent . make MainActivity ( Component Name ( LEN S _ PACKAGE , ĠL ENS _ ACTIVITY )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ RESET _ TASK _ IF _ NE EDED ) ĊĠĠĠĠĠĠĠ Ġif Ġ( context . package Manager . resolve Activity ( lens Intent , Ġ 0 ) Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġwith ( lens Icon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( lens Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclip Icon R ipp les () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcorner Radius Ġ= Ġget Corner Radius ( context , Ġpreference Manager ) ĊĠĠĠĠĠĠĠ ĠlistOf ( lens Icon , Ġmic Icon ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . clip To Outline Ġ= Ġcorner Radius Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . background Ġ= ĠPaint Drawable ( Color . TRANSP ARENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Corner Radius ( corner Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Background ( the med : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcorner Radius Ġ= Ġget Corner Radius ( context , Ġpreference Manager ) ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġif Ġ( the med ) ĠThe mes . getColor Background Floating ( context ) Ġelse ĠThe mes . get Attr Color ( context , ĠR . attr . q sb Fill Color ) ĊĠĠĠĠĠĠĠ Ġwith Ġ( inner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Outline Ġ= Ġcorner Radius Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĠPaint Drawable ( color ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Corner Radius ( corner Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGOOGLE _ PACKAGE Ġ= Ġ" com . google . android . google quick search box " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠL ENS _ PACKAGE Ġ= Ġ" com . google . ar . lens " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠL ENS _ ACTIVITY Ġ= Ġ" com . google . vr . apps . orn ament . app . lens . Lens Launcher Activity " ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Search PackageName ( context : ĠContext ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolve Search Intent ( context , ĠGOOGLE _ PACKAGE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGOOGLE _ PACKAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Package Ġ= ĠQ sb Container View . get Search Widget PackageName ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! search Package . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsearch Package ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Search Intent ( context : ĠContext , Ġsearch Package : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (" android . search . action . GLOBAL _ SEARCH ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Package ( search Package ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . package Manager . resolve Activity ( intent , Ġ 0 ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Corner Radius ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Manager : ĠPreference Manager ĊĠĠĠĠĠĠĠ Ġ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresources Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq sb Widget Height Ġ= Ġresources . get Dimension ( R . dim en . q sb _ widget _ height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq sb Widget Padding Ġ= Ġresources . get Dimension ( R . dim en . q sb _ widget _ vertical _ padding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner Height Ġ= Ġq sb Widget Height Ġ- Ġ 2 Ġ* Ġq sb Widget Padding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinner Height Ġ/ Ġ 2 Ġ* Ġpreference Manager . hot seat Q sb Corner Radius . get () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ