package Ġcom . leo . material search view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Search View . On Query Text Listener Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġcom . leo . material search view . animation utils . Circular Re veal Ċ import Ġkotlinx . android . synt hetic . main . search _ view .* Ċ import Ġkotlinx . android . synt hetic . main . search _ view . view .* ĊĊ Ċ @ Suppress (" Member Visibility Can Be Private ") Ċ class ĠMaterial Search View ( private Ġval Ġcontext : ĠContext ) Ġ: ĠLifecycle Observer Ġ{ ĊĊĠĠĠ Ġvar Ġanimation Duration : ĠInt Ġ= Ġ 2 5 0 ĊĠĠĠ Ġvar Ġshow Key Board Default : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġvar Ġsearch Hint Ġ= Ġcontext . getString ( android . R . string . search _ go ) ĊĠĠĠ Ġvar Ġback Button Drawable : ĠDrawable ? Ġ= Ġcontext . get Drawable ( R . drawable . ic _ arrow _ back ) ĊĠĠĠ Ġvar Ġclear Search On Dismiss : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġback Button Color Int : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġon Query Text Listener : ĠOn Query Text Listener ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdialog : ĠAlertDialog ĊĠĠĠ Ġprivate Ġvar Ġclicked View : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . lifecycle . add Observer ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Back Button Tint (@ Color Res Ġback Button Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġback Button Color Int Ġ= Ġback Button Color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! :: dialog . isInitialized Ġ|| Ġ! dialog . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog View Ġ= ĠView . inflate ( context , ĠR . layout . search _ view , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Builder Ġ= ĠAlertDialog . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . Search Dialog ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclicked View Ġ= Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Builder . setView ( dialog View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Ġ= Ġdialog Builder . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . init Dialog ( dialog View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Query Text Listener ( on Query Text Listener : ĠOn Query Text Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis @ Material Search View . on Query Text Listener Ġ= Ġon Query Text Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(:: dialog . isInitialized Ġ&& Ġdialog . is Showing Ġ&& Ġdialog . window ?. decor View ?. is Attached To Window !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . circular Hide () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Helper ĠMethods ĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠ Ġprivate Ġfun Ġdismiss On Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(:: dialog . isInitialized Ġ&& Ġdialog . is Showing Ġ&& Ġdialog . window ?. decor View ?. is Attached To Window !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAlertDialog . init Dialog ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset On Key Listener Ġ{ Ġ_, ĠkeyCode , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠKeyEvent . ACTION _ UP Ġ&& ĠkeyCode Ġ== ĠKeyEvent . KEYCODE _ BACK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Material Search View . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}; Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Initialization Ġof ĠDialog ĠViews ĊĠĠĠĠĠĠĠ Ġview . back Button . setOnClickListener Ġ{ Ġthis @ Material Search View . dismiss () Ġ} ĊĠĠĠĠĠĠĠ Ġview . search View . query Hint Ġ= Ġsearch Hint ĊĠĠĠĠĠĠĠ Ġif Ġ(:: on Query Text Listener . isInitialized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . search View . setOn Query Text Listener ( on Query Text Listener ) ĊĠĠĠĠĠĠĠ Ġview . back Button . setImage Drawable ( back Button Drawable ) ĊĠĠĠĠĠĠĠ Ġif Ġ( back Button Color Int Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . back Button . setColor Filter ( Context Compat . getColor ( context , Ġback Button Color Int )) ĊĠĠĠĠĠĠĠ Ġif Ġ( show Key Board Default ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . search View . request Focus From Touch () ĊĊĠĠĠĠĠĠĠ Ġcircular Show () ĊĠĠĠĠĠĠĠ Ġset Window Attributes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAlertDialog . setWindow Attributes () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġwindow ?. attributes ĊĠĠĠĠĠĠĠ Ġparams ?. gravity Ġ= ĠGr avity . TOP ĊĠĠĠĠĠĠĠ Ġwindow ?. setBackground Drawable ( Color Drawable ( Color . TRANSP ARENT )) ĊĠĠĠĠĠĠĠ Ġwindow ?. attributes Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġwindow ?. set Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ NOT _ TO UCH _ MOD AL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ NOT _ TO UCH _ MOD AL ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwindow ?. clear Flags ( WindowManager . LayoutParams . FLAG _ DIM _ BE H IND ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAlertDialog . circular Show () Ġ{ ĊĠĠĠĠĠĠĠ Ġset On Show Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCircular Re veal . start Re veal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclicked View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Duration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAlertDialog . circular Hide () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( clear Search On Dismiss Ġ&& Ġsearch View Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . set Query ("", Ġtrue ) ĊĠĠĠĠĠĠĠ ĠCircular Re veal . start Re veal ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclicked View , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Duration ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }