package Ġcom . s ui han 7 4 . sat ena . dialogs Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . s ui han 7 4 . sat ena . R Ċ import Ġcom . s ui han 7 4 . sat ena . databinding . Fragment Dialog TextInput Binding Ċ import Ġcom . s ui han 7 4 . utilities .* Ċ import Ġcom . s ui han 7 4 . utilities . extensions . getInt OrNull Ċ import Ġcom . s ui han 7 4 . utilities . extensions . show Soft Input Method Ċ import Ġcom . s ui han 7 4 . utilities . extensions . with Arguments Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* Ġ æĸĩåŃĹåĪĹ åħ¥åĬĽ çĶ¨ ãģ® ãĥĢ ãĤ¤ ãĤ¢ ãĥŃãĤ° Ċ Ġ*/ Ċ class ĠText Input Dialog Fragment Ġ: ĠDialog Fragment () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ String Res Ġtitle Id : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ String Res Ġdescription Id : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ String Res Ġhint Id : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ String Res Ġneutral ButtonText Id : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value : ĠString ? Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĠText Input Dialog Fragment (). with Arguments Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Id ?. let Ġ{ Ġput Int ( Arg . TITLE _ ID . name , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Id ?. let Ġ{ Ġput Int ( Arg . DESCRIPTION _ ID . name , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint Id ?. let Ġ{ Ġput Int ( Arg . HINT _ ID . name , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneutral ButtonText Id ?. let Ġ{ Ġput Int ( Arg . NE UT R AL _ BUTTON _ TEXT _ ID . name , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Arg . INITIAL _ VALUE . name , Ġinitial Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġenum Ġclass ĠArg Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTITLE _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDESCRIPTION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH INT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNE UT R AL _ BUTTON _ TEXT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINITIAL _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġlazy Provide ViewModel Ġ{ ĊĠĠĠĠĠĠĠ ĠDialog ViewModel ( require Arguments ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( savedInstanceState : ĠBundle ?): ĠDialog Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . dialog _ cancel , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . dialog _ ok , Ġnull ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . title Id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . description Id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . neutral ButtonText Id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Neutral Button ( it , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠFragment Dialog TextInput Binding . inflate ( layout Inflater , Ġnull , Ġfalse ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . vm Ġ= ĠviewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . setView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . show (). also Ġ{ Ġdialog Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Soft Input Method ( binding . edit Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . get Button ( DialogInterface . BUTTON _ POSITIVE )?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠviewModel . text Value . value . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . validator ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . onComplete Listener ?. invoke ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TextInput Dialog Fragment ", ĠLog . get StackTrace String ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . get Button ( DialogInterface . BUTTON _ NE UT R AL )?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠviewModel . text Value . value . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . onClick Neutral Button ?. invoke ( value , Ġthis @ TextInput Dialog Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TextInput Dialog Fragment ", ĠLog . get StackTrace String ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġfun Ġset Validator ( v : ĠS uspend Switch er < String > ?) Ġ= Ġlifecycle Scope . launch When Created Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . validator Ġ= Ġv Ġ?: Ġ{ Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Complete Listener ( l : ĠS uspend Listener < String > ?) Ġ= Ġlifecycle Scope . launch When Created Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . onComplete Listener Ġ= Ġl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset OnClick Neutral Button Listener ( l : Ġ( suspend Ġ( value : ĠString , Ġf : ĠText Input Dialog Fragment )-> Unit )? ) Ġ= Ġlifecycle Scope . launch When Created Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . onClick Neutral Button Ġ= Ġl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text ( value : ĠString ) Ġ= Ġlifecycle Scope . launch When Created Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . text Value . value Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġclass ĠDialog ViewModel ( args : ĠBundle ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ String Res Ġval Ġtitle Id Ġ= Ġargs . getInt OrNull ( Arg . TITLE _ ID . name ) ĊĠĠĠĠĠĠĠ Ġ@ String Res Ġval Ġdescription Id Ġ= Ġargs . getInt OrNull ( Arg . DESCRIPTION _ ID . name ) ĊĠĠĠĠĠĠĠ Ġ@ String Res Ġval Ġhint Id Ġ= Ġargs . getInt OrNull ( Arg . HINT _ ID . name ) ĊĠĠĠĠĠĠĠ Ġ@ String Res Ġval Ġneutral ButtonText Id Ġ= Ġargs . getInt OrNull ( Arg . NE UT R AL _ BUTTON _ TEXT _ ID . name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Value Ġ= ĠMutable LiveData ( args . getString ( Arg . INITIAL _ VALUE . name , Ġ"")) ĊĊĠĠĠĠĠĠĠ Ġvar Ġvalidator Ġ: ĠS uspend Switch er < String > Ġ= Ġ{ Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġvar ĠonComplete Listener Ġ: ĠS uspend Listener < String >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar ĠonClick Neutral Button Ġ: Ġ( suspend Ġ( value : ĠString , Ġf : ĠText Input Dialog Fragment )-> Unit )? Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ