package Ġio . tl . mvp . lib ĊĊ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . app . Progress Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget .* Ċ import Ġandroidx . annotation . Call Super Ċ import Ġbutter knife . B utter Kn ife Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . jak ew h art on . r xb ind ing 3 . view . click s Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ // region Ġbase Ġview Ġdefinitions Ċ abstract Ġclass ĠM vp View { ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġweak Context Ġ: ĠWeak Reference <( Context )> ĊĊĠĠĠ Ġpublic Ġfun ĠgetContext (): ĠContext { ĊĠĠĠĠĠĠĠ Ġreturn Ġweak Context . get () !! ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġprotected Ġfun Ġadd Disposable ( var arg Ġd : ĠDis posable ){ ĊĠĠĠĠĠĠĠ Ġd . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġlateinit Ġvar Ġscreen Container : ĠViewGroup ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġ Ġcontent Layout Id : ĠInt ĊĊĠĠĠ Ġ@ Call Super ĊĠĠĠ Ġprotected Ġopen Ġfun Ġinit Views (){ ĊĠĠĠĠĠĠĠ Ġscreen Container Ġ= ĠFrame Layout ( getContext ()) ĊĠĠĠĠĠĠĠ ĠView . inflate ( getContext (), Ġcontent Layout Id , Ġscreen Container ) ĊĊĠĠĠĠĠĠĠ ĠB utter Kn ife . bind ( this , Ġscreen Container ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdo De init (){ ĊĠĠĠĠĠĠĠ Ġdis pos ables . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Init ( getContext Ġ: Ġ( ()-> Context )) Ġ{ ĊĠĠĠĠĠĠĠ Ġweak Context Ġ= ĠWeak Reference ( getContext . invoke ()) ĊĠĠĠĠĠĠĠ Ġ// Inf late Ġthe Ġlayout Ġinto Ġthe Ġview Group ĊĠĠĠĠĠĠĠ Ġinit Views () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġprogress Dialog : ĠAlertDialog ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠprogressBar : ĠProgress Bar ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġfun Ġhide All Dialog s (){ ĊĠĠĠĠĠĠĠ Ġhide Loading () ĊĠĠĠĠĠĠĠ Ġhide Dialog () ĊĠĠĠĠĠĠĠ Ġhide Progress () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// region Ġloading Ġhub ĊĠĠĠ Ġ// a Ġloading Ġhub . Ġ Ġwhich Ġcannot Ġbe Ġdis missed / closed / hidden Ġby Ġthe Ġuser ĊĠĠĠ Ġprivate Ġvar Ġloading Dialog : ĠProgress Dialog ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġshow Loading ( Ġtitle : String ? Ġ= Ġnull , Ġmsg : ĠString ? Ġ=" Please Ġwait ... "){ ĊĠĠĠĠĠĠĠ Ġscreen Container . post { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Progress () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( loading Dialog == null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Dialog Ġ= ĠProgress Dialog . show ( getContext (), Ġtitle , Ġmsg , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġscreen Container . post { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" hide Overlay s ", Ġ" hide Loading Dialog Ġ$ loading Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading Dialog ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Dialog Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġ// region Ġdialog ĊĠĠĠ Ġprivate Ġvar Ġdialog : ĠAlertDialog ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġfun Ġhide Dialog (){ ĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" hide Overlay s ", Ġ" hide Dialog Ġ$ dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog ?. dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġshow Ġa Ġdialog Ġwith Ġ" Ok ay " Ġand Ġ" Cancel " Ġbuttons ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow Alert Msg ( Ġalert Title : String , Ġalert Msg : ĠString ?= null , Ġon Button Clicked : Ġ(( yes Or No : ĠBoolean )-> Unit )? Ġ= Ġnull ){ ĊĠĠĠĠĠĠĠ Ġhide All Dialog s () ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Ġ= ĠAlertDialog . Builder ( getContext ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( alert Title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( alert Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġon Button Clicked ?. invoke ( true ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . cancel ) Ġ{ Ġ_, Ġ_ Ġ-> Ġon Button Clicked ?. invoke ( false ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ Ġdialog Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġshow Ġa Ġdialog Ġwith Ġ" Yes " Ġand Ġ" No " Ġbuttons ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow Warning Msg ( Ġwarning Title : ĠString , Ġwarning Msg : ĠString , Ġon Yes Or No Clicked : Ġ(( yes Or No : ĠBoolean )-> Unit )? Ġ= Ġnull ){ ĊĠĠĠĠĠĠĠ Ġhide All Dialog s () ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Ġ= ĠAlertDialog . Builder ( getContext ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( warning Title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( warning Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . yes ) Ġ{ Ġ_, Ġ_ Ġ-> Ġon Yes Or No Clicked ?. invoke ( true ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . no ) Ġ{ Ġ_, Ġ_ Ġ-> Ġon Yes Or No Clicked ?. invoke ( false ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ Ġdialog Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Warning Msg ( Ġwarning Msg : ĠString , Ġon Yes Or No Clicked : Ġ(( yes Or No : ĠBoolean )-> Unit )? Ġ= Ġnull ){ ĊĠĠĠĠĠĠĠ Ġhide All Dialog s () ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Ġ= ĠAlertDialog . Builder ( getContext ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" WARNING ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( warning Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . yes ) Ġ{ Ġ_, Ġ_ Ġ-> Ġon Yes Or No Clicked ?. invoke ( true ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . no ) Ġ{ Ġ_, Ġ_ Ġ-> Ġon Yes Or No Clicked ?. invoke ( false ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ Ġdialog Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ErrMsg From Throwable ( throwable : ĠThrowable ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠerrorMessage Ġ= Ġthrowable . localized Message ?. take If Ġ{ Ġit . isNotBlank () Ġ} Ġ?: Ġthrowable . toString () ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġreturn ĠerrorMessage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShow Ġa Ġdialog Ġwith Ġa Ġ" Ok ay " Ġbutton ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow ErrorMsg ( Ġthrowable : ĠThrowable , Ġon Btn Clicked : Ġ( ()-> Unit )? Ġ= Ġnull Ġ){ ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerr Title Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrMsg Ġ= Ġget ErrMsg From Throwable ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbtn Msg Id Ġ= ĠR . string . ok ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcancel able Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġ Ġon Btn Clicked ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMsg With Title ( err Title , ĠerrMsg Ġ= ĠerrMsg , Ġbtn Msg Id Ġ= Ġbtn Msg Id , Ġcancel able Ġ= Ġcancel able , Ġon Btn Clicked Ġ= Ġaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShow Ġa Ġdialog Ġwith Ġa Ġ" Ok ay " Ġbutton ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow ErrorMsg ( Ġmsg : ĠString ?, Ġthrowable : ĠThrowable , Ġon Btn Clicked : Ġ( ()-> Unit )? Ġ= Ġnull Ġ){ ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerr Title Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrMsg Ġ= Ġmsg Ġ?: Ġget ErrMsg From Throwable ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbtn Msg Id Ġ= ĠR . string . ok ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcancel able Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠĠĠ Ġon Btn Clicked ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMsg With Title ( err Title , ĠerrMsg Ġ= ĠerrMsg , Ġbtn Msg Id Ġ= Ġbtn Msg Id , Ġcancel able Ġ= Ġcancel able , Ġon Btn Clicked Ġ= Ġaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShow Ġa Ġdialog Ġwith Ġa Ġ Ġbutton ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow ErrorMsg ( Ġ ĠerrMsg Res Id : ĠInt , Ġbtn Msg Id : ĠInt , Ġon Btn Clicked : Ġ( ()-> Unit )? Ġ= Ġnull Ġ){ ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMsg With Title ( err Title ="", ĠerrMsg Id Ġ= ĠerrMsg Res Id , Ġbtn Msg Id Ġ= Ġbtn Msg Id , Ġon Btn Clicked Ġ= Ġon Btn Clicked ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ErrorMsg With Title ( Ġerr Title Id : ĠInt , ĠerrMsg : ĠString ?= null , Ġbtn Msg Id : ĠInt Ġ= ĠR . string . ok , Ġon Btn Clicked : Ġ( ()-> Unit )? Ġ= Ġnull Ġ){ ĊĠĠĠĠĠĠĠ Ġhide All Dialog s () ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Ġ= ĠAlertDialog . Builder ( getContext ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( err Title Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( err Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( btn Msg Id ) Ġ{ Ġ_, Ġ_ Ġ-> Ġon Btn Clicked ?. invoke () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ Ġdialog Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Msg With Title ( Ġerr Title Id : ĠInt , ĠerrMsg Id : ĠInt , Ġbtn Msg Id : ĠInt , Ġon Btn Clicked : Ġ( ()-> Unit )? Ġ= Ġnull Ġ){ ĊĊĠĠĠĠĠĠĠ Ġhide All Dialog s () ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Ġ= ĠAlertDialog . Builder ( getContext ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( err Title Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( err Msg Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( btn Msg Id ) Ġ{ Ġ_, Ġ_ Ġ-> Ġon Btn Clicked ?. invoke () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ Ġdialog Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ErrorMsg With Title ( Ġerr Title : String , ĠerrMsg : ĠString ?= null , Ġbtn Msg Id : ĠInt Ġ= ĠR . string . ok , Ġcancel able : ĠBoolean Ġ= Ġtrue , Ġon Btn Clicked : Ġ( ()-> Unit )? Ġ= Ġnull Ġ){ ĊĠĠĠĠĠĠĠ Ġhide All Dialog s () ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Ġ= ĠAlertDialog . Builder ( getContext ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( err Title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( err Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( cancel able ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( btn Msg Id ) Ġ{ Ġ_, Ġ_ Ġ-> Ġon Btn Clicked ?. invoke () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ Ġdialog Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ErrorMsg With Title ( Ġerr Title : String , ĠerrMsg Id : ĠInt , Ġbtn Msg Id : ĠInt Ġ= ĠR . string . ok , Ġon Btn Clicked : Ġ( ()-> Unit )? Ġ= Ġnull Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide All Dialog s () ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Ġ= ĠAlertDialog . Builder ( getContext ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( err Title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( err Msg Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( btn Msg Id ) Ġ{ Ġ_, Ġwhich Ġ-> Ġon Btn Clicked ?. invoke () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ Ġdialog Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ErrorMsg And Try Again ( Ġthrowable : ĠThrowable , Ġcancel able : ĠBoolean Ġ= Ġtrue , Ġ Ġon Try Again Clicked : Ġ( ()-> Unit )){ ĊĠĠĠĠĠĠĠ Ġhide All Dialog s () ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrMsg Ġ= Ġget ErrMsg From Throwable ( throwable ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMsg With Title ("", ĠerrMsg Ġ= ĠerrMsg , Ġbtn Msg Id Ġ= ĠR . string . try _ again , Ġcancel able Ġ= Ġcancel able , Ġon Btn Clicked Ġ= Ġon Try Again Clicked ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġshow Ġa Ġdialog Ġwith Ġprogress Ġbar ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġplay ( from : ĠInt , Ġto : ĠInt , Ġmax : ĠInt , Ġduration : ĠLong , Ġcompletion : Ġ( ()-> Unit )? ) Ġ{ ĊĠĠĠĠĠĠĠ ĠprogressBar ?. let Ġ{ Ġthe ProgressBar -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweight Ġ= Ġduration . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe ProgressBar . max Ġ= Ġmax * weight ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue Animator . of Int ( from Ġ* Ġweight , Ġto Ġ* Ġweight ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . duration Ġ= Ġduration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . repeat Count Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Animator -> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe ProgressBar . progress Ġ= Ġvalue Animator . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . addListener ( object Ġ: ĠAn imator . Animator Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġshow Progress ( activity : ĠActivity , Ġfrom : ĠInt , Ġto : ĠInt , Ġmax : ĠInt , Ġduration : ĠLong , Ġcompletion : Ġ( ()-> Unit )? Ġ= Ġnull ){ ĊĠĠĠĠĠĠĠ Ġhide Loading () ĊĠĠĠĠĠĠĠ Ġhide Dialog () ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( progress Dialog Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( activity ). inflate ( R . layout . dialog _ progress _ bar , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar Ġ= Ġview Ġas ĠProgress Bar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog Ġ= ĠAlertDialog . Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . window ?. setBackground Drawable Resource ( android . R . color . transparent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay ( from , Ġto , Ġmax , Ġduration , Ġcompletion ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Progress (){ ĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" hide Overlay s ", Ġ" hide Progress Dialog Ġ$ progress Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog ?. dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġ// endregion ĊĠĠĠ Ġfun Ġhide Keyboard ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . let { Ġthe Activity -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Activity . current Focus ?. let Ġ{ current Focus -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( the Activity . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. hide Soft Input From Window ( current Focus . window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Sn ackBar ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide All Dialog s () ĊĊĠĠĠĠĠĠĠ Ġscreen Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( screen Container , Ġmessage , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Suppress Lint (" SetText I 1 8 n ") Ċ fun ĠTextView . display Build Info ( appName : ĠString , Ġversion Name : ĠString , Ġversion Code : ĠInt , Ġ Ġbackend : ĠString ?, Ġflavor : ĠString ? Ġ) Ġ{ ĊĊĠĠĠ Ġval Ġbackend Str Ġ= Ġbackend ?. let Ġ{ Ġit ->" _$ it ". toUpperCase ( Locale . ROOT )} Ġ?: Ġ"" ĊĊĠĠĠ Ġthis . text Ġ= Ġ"${ appName } Ġ Ġ${ version Name }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ context . getString ( R . string . version )} Ġ: Ġ${ version Code }\ n ${ flavor ?. toUpperCase ( Locale . ROOT ) Ġ?: Ġ"" } Ġ${ backend Str }}" Ċ } Ċ Ċ fun ĠEditText . capitalize Input Text ( text Watcher : ĠText Watcher ? Ġ= Ġnull ){ ĊĠĠĠ Ġthis . add TextChanged Listener ( ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠText Watcher { ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( char Sequence : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" capitalize Text 1 ", Ġ"< $ char Sequence > Ġ$ start , Ġ$ count , Ġ$ after ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ capitalize Input Text . remove TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Watcher ?. before TextChanged ( char Sequence , Ġstart , Ġcount , Ġafter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ capitalize Input Text . add TextChanged Listener ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" capitalize Text 2 ", Ġ"< $ s > Ġ$ start , Ġ$ before , Ġ$ count ") ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ capitalize Input Text . remove TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Watcher ?. on TextChanged ( s , Ġstart , Ġbefore , Ġcount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ capitalize Input Text . add TextChanged Listener ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( editable : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" capitalize Text 3 ", Ġ"< $ editable >") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ capitalize Input Text . remove TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditable . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġit . toString (). toUpperCase ( locale Ġ= ĠLocale . EN GL ISH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditable . replace ( 0 , Ġit . length , Ġc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Watcher ?. after TextChanged ( editable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ capitalize Input Text . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ // endregion Ċ Ċ // region Ġview Ġextensions ĊĊ Ċ fun ĠView . click Throttle ( duration : ĠLong Ġ= Ġ 5 0 0 ): ĠObservable < Unit > Ġ{ ĊĠĠĠ Ġreturn Ġthis . click s (). throttle First ( duration , ĠTimeUnit . MILLISECONDS ) Ċ } Ċ Ċ fun Ġ< T > ĠPublish Subject < T >. throttle ( duration : ĠLong Ġ= Ġ 5 0 0 ): ĠObservable < T > Ġ{ ĊĠĠĠ Ġreturn Ġthis . throttle First ( Ġduration , ĠTimeUnit . MILLISECONDS ) Ċ } Ċ Ċ fun ĠView . click Throttle With Fade InOut (): ĠObservable < Unit > Ġ{ ĊĊĠĠĠ Ġreturn Ġthis . click s (). throttle First ( 5 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue Animator . of Float ( 1 . 0 f , Ġ 0 . 5 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 4 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= Ġ 0 ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Animator -> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ click Throttle With Fade InOut . alpha Ġ= Ġvalue Animator . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . addListener ( object Ġ: ĠAn imator . Animator Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" With Fade InOut ", Ġ" on Animation Repeat ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" With Fade InOut ", Ġ" on Animation End ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ click Throttle With Fade InOut . alpha Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" With Fade InOut ", Ġ" on Animation Cancel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" With Fade InOut ", Ġ" on Animation Start ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. start () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. delay ( 1 5 0 , ĠTimeUnit . MILLISECONDS ) Ċ } Ċ // endregion Ċ