package Ġim . ze go . goc lass . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view .* Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . TextView . Buffer Type Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġim . ze go . goc lass . tool . Toast Utils Ċ import Ġim . ze go . goc lass . R Ċ Ċ /** Ċ Ġ* Ġ çĶ¨äºİ å¤§ çıŃ è¯¾ è®¨ è®º åĪĹè¡¨ çļĦ è¾ĵåħ¥ å¯¹ è¯Ŀ æ¡Ĩ Ċ Ġ*/ Ċ const Ġval ĠMAX _ LENGTH Ġ= Ġ 1 0 0 Ċ class ĠInput Dialog Ġ: ĠDialog Fragment () Ġ{ ĊĊĠĠĠ Ġvar Ġsend Listener : Ġ( String ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . window ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . gravity Ġ= Ġget Gravity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmode Ġ= ĠWindow Manager . LayoutParams . SOFT _ INPUT _ STATE _ ALWAYS _ VISIBLE Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . SOFT _ INPUT _ ADJ UST _ NOTH ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Soft Input Mode ( mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . layout _ soft input , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġinput EditText Ġ= Ġview . findViewById < EditText >( R . id . soft input _ edit text ) ĊĠĠĠĠĠĠĠ Ġrequest Input Window ( input EditText ) ĊĠĠĠĠĠĠĠ Ġinput EditText . is Save From Parent Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġinput EditText . add TextChanged Listener ( MaxLength Watcher ( MAX _ LENGTH , Ġinput EditText )) ĊĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . input _ send ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( input EditText . text . toString (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Listener . invoke ( input EditText . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġview ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Input Window ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Gravity () Ġ= ĠGr avity . BOTTOM ĊĊĠĠĠ Ġprivate Ġfun Ġget Dialog Size (): ĠPoint Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPoint ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Input Window ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġview . context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġimm . hide Soft Input From Window ( view . window Token , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Input Window ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġview . request Focus () ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġview . context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġvar Ġinput Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( view . is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ= Ġimm . show Soft Input ( view , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġis add ĠåĴĮ Ġis Showing ĠåĪ¤æĸŃ æĺ¾ç¤º éĥ½ æľī éĹ®é¢ĺ ĊĠĠĠ Ġprivate Ġvar Ġshow edBy Self Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Style ( STYLE _ NO _ TITLE , Ġget Dialog Style ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġdialog ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Canceled On Touch Outside ( c anceled On Touch Outside ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancel able ( cancel able ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġdialog ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Size : ĠPoint Ġ= Ġget Dialog Size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setLayout ( dialog Size . x , Ġdialog Size . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Dim Amount ( background Dim Amount ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow ( ĊĠĠĠĠĠĠĠ Ġmanager : ĠFragment Manager , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshow edBy Self Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . show ( manager , Ġtag ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġft Ġ= Ġmanager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġft . add ( this , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġft . commit Allow ing State Loss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show edBy Self ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Allow ing State Loss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcanceled On Touch Outside (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcancel able (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbackground Dim Amount (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 . 1 5 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠéľĢè¦ģ çī¹ åĪ« çļĦ åĬ¨çĶ» åı¯ä»¥åľ¨ è¿ĻéĩĮ è®¾ç½® style ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Dialog Style (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . style . Dialog Fragment Style ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMax Length Watcher ( private Ġvar ĠmaxLength : Int , Ġvar Ġedit Text : ĠEditText ) Ġ: ĠText Watcher Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġs ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtoString Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( toString . length Ġ> ĠmaxLength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Center Toast ( edit Text . context . getString ( R . string . room _ im _ max _ characters , ĠmaxLength )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Sequence Ġ= ĠtoString . sub Sequence ( 0 , ĠmaxLength ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . setText ( sub Sequence , ĠBuffer Type . EDIT ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . setSelection ( sub Sequence . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ