package Ġcom . hello . window view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġkotlinx . android . synt hetic . main . layout _ window . view .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġwindow View : ĠMy Window ĊĊĠĠĠ Ġprivate Ġvar Ġwindow Show ed Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġwindow View Ġ= ĠLayoutInflater . from ( this ). inflate ( R . layout . layout _ window , Ġnull ) Ġas ĠMy Window ĊĠĠĠĠĠĠĠ Ġwindow View . back Callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwindow View . close . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( window Show ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . remove View ( window View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Show ed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Window ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow Show ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġwindow Manager . addView ( window View , ĠWindow Manager . LayoutParams (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 2 0 0 f . dp 2 Px (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 3 0 0 f . dp 2 Px (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġand Ġ( WindowManager . LayoutParams . FLAG _ WATCH _ OUT SIDE _ TO UCH . inv ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( window Show ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . remove View ( window View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Show ed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMy Window ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: ĠLinearLayout ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġvar Ġback Callback : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch KeyEvent ( event : ĠKeyEvent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event ?. keyCode Ġ== ĠKeyEvent . KEYCODE _ BACK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback Callback ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch KeyEvent ( event ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun ĠFloat . dp 2 Px (): ĠFloat Ġ{ ĊĠĠĠ Ġreturn ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġthis , ĠResources . getSystem (). display Metrics ) Ċ }