package Ġcom . d ron . app . v rt ul nice k . views Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . support . constraint . Constraint Layout Ċ import Ġandroid . support . constraint . Constraint Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ import Ġcom . d ron . app . R Ċ Ċ /* Ċ * Ġfunction Ġplace ĠPopup Ġlayout Ġinto Ġmain Ġconstraint Ġlayout Ġand Ġset Ġlisteners Ġfor Ġbutton Ġto Ġshow Ġview */ Ċ fun Ġplace a And Hook View As Context Popup ( ctx : ĠContext , Ġlinear Layout Id : Int , Ġroot Layout : ĠConstraint Layout , Ġtoolbar Element Ġ: ĠView , Ġunique Id : ĠInt , Ġtool Bar Ġ: ĠLinearLayout , Ġon show : Ġ() Ġ-> ĠUnit , on hide : Ġ() Ġ-> ĠUnit ) Ġ: ĠLinearLayout Ġ{ ĊĊĠĠĠ Ġval Ġpopup Ġ= ĠLinearLayout ( ctx ) ĊĊĠĠĠ ĠLayoutInflater . from ( ctx ). inflate ( linear Layout Id , popup ) ĊĊĠĠĠ Ġpopup . layout Params Ġ= ĠViewGroup . LayoutParams ( 5 0 , 5 0 ) ĊĠĠĠ Ġpopup . id Ġ= Ġunique Id ĊĊĠĠĠ Ġpopup . layout Params Ġ= ĠViewGroup . LayoutParams ( ViewGroup . LayoutParams . WRAP _ CONTENT , ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠ Ġroot Layout . addView ( popup ) ĊĊĠĠĠ Ġval Ġlocation Ġ= ĠInt Array ( 2 ) ĊĠĠĠ Ġtoolbar Element . getLocation On Screen ( location ) ĊĊĊĠĠĠ Ġval Ġwindow _ size Ġ= ĠPoint () ĊĠĠĠ Ġ( ctx Ġas ĠActivity ). window Manager . default Display . get Real Size ( window _ size ) ĊĠĠĠ Ġ// Ġcompute Ġhorizontal Ġbias Ġof Ġpopup Ġon Ġscreen , Ġif Ġtoolbar Element Ġis Ġin Ġleft Ġsize Ġof Ġscreen Ġpopup Ġwill Ġbe Ġbi ase Ġto Ġleft Ġside Ġtoo ĊĠĠĠ Ġval Ġbias Ġ: Float Ġ= Ġlocation [ 0 ]. toFloat () Ġ/ Ġ Ġ( window _ size . x Ġ- Ġtoolbar Element . width ) ĊĊĊĠĠĠ Ġ// Ġsetup Ġconstraint Ġfor Ġnewly Ġmade Ġpopup ĊĠĠĠ Ġval Ġset Ġ= Ġ ĠConstraint Set () ĊĠĠĠ Ġset . clone ( root Layout ) ĊĠĠĠ Ġset . connect ( popup . id , ĠConstraint Set . TOP , tool Bar . id , ĠConstraint Set . BOTTOM ) ĊĠĠĠ Ġset . center H orizontally ( popup . id , root Layout . id , ĠConstraint Set . LEFT , 0 , root Layout . id , ĠConstraint Set . RIGHT , 0 , bias ) ĊĠĠĠ Ġset . apply To ( root Layout ) ĊĊĊĠĠĠ Ġ// Ġbacking Ġup Ġtoolbar Element Ġid Ġto Ġtag ĊĠĠĠ Ġpopup . setTag ( R . id . toolbar _ parent , toolbar Element . id . toString ()) ĊĠĠĠ Ġpopup . visibility Ġ= ĠView . IN VISIBLE ĊĊĠĠĠ Ġ// Ġonclick Ġaction Ġfor Ġtoolbar Element ĊĠĠĠ Ġtoolbar Element . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġpopup . br ing To Front () ĊĠĠĠĠĠĠĠ Ġpopup . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġpopup . is Focus able In Touch Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġusing Ġfocus Ġas Ġindication Ġfor Ġactivity Ġwhich Ġpopup Ġis Ġopened ĊĠĠĠĠĠĠĠ Ġpopup . request Focus () ĊĠĠĠĠĠĠĠ Ġon show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpopup . setOn Focus ChangeListener Ġ{ Ġv , Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġchecking Ġwhether Ġthere Ġis Ġno Ġother ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġpopup Ċ }