package Ġio . github . lee 0 7 0 1 . converter . candidates . view Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġio . github . lee 0 7 0 1 . converter . R Ċ import Ġio . github . lee 0 7 0 1 . converter . candidates . Candidate Ċ import Ġio . github . lee 0 7 0 1 . converter . databinding . Candidates View Vertical Binding Ċ Ċ class ĠVertical Candidates Window ( private Ġval Ġcontext : ĠContext ): ĠC andidates Window ( context ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġresources Ġ= Ġcontext . resources ĊĠĠĠ Ġprivate Ġval Ġstatus Bar Height ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġresources . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getIdentifier (" status _ bar _ height ", Ġ" dim en ", Ġ" android ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġwindow Size Multiplier Ġ= Ġ 4 0 ĊĊĠĠĠ Ġprivate Ġval Ġcolumn Count Ġ= Ġpreferences . getInt (" column _ count ", Ġ 2 ) ĊĠĠĠ Ġprivate Ġval Ġwindow Width Ġ= Ġget Window Size ( preferences . getInt (" window _ width ", Ġ 5 )) ĊĠĠĠ Ġprivate Ġval Ġwindow Height Ġ= Ġget Window Size ( preferences . getInt (" window _ height ", Ġ 4 )) ĊĊĠĠĠ Ġprivate Ġvar Ġcandidates View : ĠC andidates View Vertical Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġwindow Shown Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġshow ( candidates : ĠList < Candidate >, Ġrect : ĠRect , Ġon Item Click : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( candidates View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcandidates View Ġ= ĠC andidates View Vertical Binding . inflate ( LayoutInflater . from ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates View . root . set BackgroundColor ( window Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates View . close . setOnClickListener Ġ{ Ġdestroy () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates View . close . background Tint List Ġ= ĠColor State List . valueOf ( textColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates View . close . alpha Ġ= Ġtext Alpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates View . count . setTextColor ( textColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates View . count . alpha Ġ= Ġtext Alpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates View . list . layout Manager Ġ= ĠGrid LayoutManager ( context , Ġcolumn Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates View . list . add On Scroll Listener ( object : ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġ( candidates View . list . layout Manager Ġas ĠGrid LayoutManager ). findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġcandidates View . list . adapter ?. item Count Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates View . count . text Ġ= Ġ"$ p Ġ/ Ġ$ count " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠWindow Manager . LayoutParams . TYPE _ ACC ES SI B ILITY _ OVER LAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE Ġor ĠWindow Manager . LayoutParams . FLAG _ NOT _ TO UCH _ MOD AL ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Pos Ġ= Ġrect . left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Pos Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( rect . center Y () Ġ< Ġcontext . resources . display Metrics . height Pixels Ġ/ Ġ 2 ) Ġrect . bottom Ġ- Ġstatus Bar Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġrect . top Ġ- Ġwindow Height Ġ- Ġstatus Bar Height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠWindow Manager . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Width , Ġwindow Height , Ġx Pos , Ġy Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype , Ġflags , ĠPixel Format . TRANSL UC ENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . gravity Ġ= ĠGr avity . TOP Ġor ĠGr avity . START ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . addView ( candidates View . root , Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( ex : ĠWindow Manager . Bad Token Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠR . string . overlay _ permission _ required , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . candidates View Ġ= Ġcandidates View ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġcandidates View Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġview . list . adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVertical Candidate ListAdapter ( show Extra , ĠtextColor , Ġextra Color , Ġtext Alpha , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates . to Typed Array (), Ġon Item Click ) ĊĠĠĠĠĠĠĠ Ġview . list . scrollTo Position ( 0 ) ĊĠĠĠĠĠĠĠ Ġwindow Shown Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġcandidates View ?. root ?. let Ġ{ Ġwindow Manager . remove View ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġcandidates View Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwindow Shown Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Window Size ( size In Pref : ĠInt ): ĠInt Ġ= ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ DIP , ĊĠĠĠĠĠĠĠ Ġ( size In Pref Ġ* Ġwindow Size Multiplier ). toFloat (), ĊĠĠĠĠĠĠĠ Ġcontext . resources . display Metrics ĊĠĠĠ Ġ). toInt () Ċ Ċ }