package Ġex h . ui . batch add Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . view . isVisible Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġdev . chr is ban es . in setter . apply In setter Ċ import Ġeu . kan ade . t ach iy omi . R Ċ import Ġeu . kan ade . t ach iy omi . databinding . Eh Fragment Batch Add Binding Ċ import Ġeu . kan ade . t ach iy omi . ui . base . controller . N ucleus Controller Ċ import Ġkotlinx . coroutines . channels . Buffer Overflow Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . flow . buffer Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . map Latest Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġkotlinx . coroutines . launch Ċ import Ġreactive circ us . flow binding . android . view . click s Ċ Ċ /** Ċ Ġ* ĠBatch Ġadd Ġscreen Ċ Ġ*/ Ċ class ĠBatch Add Controller Ġ: ĠN ucleus Controller < Eh Fragment Batch Add Binding , ĠBatch Add Presenter >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Title () Ġ= Ġactivity !!. getString ( R . string . batch _ add ) ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Presenter () Ġ= ĠBatch Add Presenter () ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Binding ( in flater : ĠLayoutInflater ) Ġ= ĠE h Fragment Batch Add Binding . inflate ( in flater ) ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view ) ĊĊĠĠĠĠĠĠĠ Ġbinding . btn Add G all eries . click s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd G all eries ( binding . g all eries Box . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( view Scope ) ĊĊĠĠĠĠĠĠĠ Ġbinding . progress Dismiss Btn . click s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . currently Adding Flow . value Ġ= ĠBatch Add Presenter . STATE _ PROGRESS _ TO _ INPUT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( view Scope ) ĊĊĠĠĠĠĠĠĠ Ġbinding . scroll View . apply In setter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype ( navigation Bars Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpresenter . currently Adding Flow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. buffer ( capacity Ġ= Ġ 0 , Ġon Buffer Overflow Ġ= ĠBuffer Overflow . SUS PEND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Latest Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBatch Add Presenter . STATE _ INPUT _ TO _ PROGRESS Ġ-> Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Progress ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . progress Flow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. buffer ( capacity Ġ= ĠChannel . REN DE Z VO US ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine ( presenter . progress Total Flow ) Ġ{ Ġprogress , Ġtotal Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġhide Ġdismiss Ġbutton ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Dismiss Btn . isVisible Ġ= Ġprogress Ġ== Ġtotal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Progress ( progress , Ġtotal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Text . text Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . progress Total Flow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. buffer ( capacity Ġ= ĠChannel . REN DE Z VO US ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . max Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . progress Flow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. buffer ( capacity Ġ= ĠChannel . REN DE Z VO US ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . progress Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . event Flow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . buffer ( capacity Ġ= ĠChannel . REN DE Z VO US ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Log . append ("$ it \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . launch In ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBatch Add Presenter . STATE _ PROGRESS _ TO _ INPUT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Progress ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . currently Adding Flow . value Ġ= ĠBatch Add Presenter . STATE _ IDLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( view Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠE h Fragment Batch Add Binding . progress Views ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Title View , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Log , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Text , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval ĠE h Fragment Batch Add Binding . input Views ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Title View , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg all eries Box , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Add G all eries , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġvar ĠList < View >. isVisible : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthrow ĠUnsupportedOperationException () ĊĠĠĠĠĠĠĠ Ġset ( v ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠforEach Ġ{ Ġit . isVisible Ġ= Ġv Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Progress ( target : ĠE h Fragment Batch Add Binding Ġ= Ġbinding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Views . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 5 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Views . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. progress Log . text Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Progress ( target : ĠE h Fragment Batch Add Binding Ġ= Ġbinding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Views . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Dismiss Btn . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 5 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Views . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. g all eries Box . setText ("", ĠTextView . Buffer Type . EDIT ABLE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat Progress ( progress : ĠInt , Ġtotal : ĠInt ) Ġ= Ġ"$ progress /$ total " ĊĊĠĠĠ Ġprivate Ġfun Ġadd G all eries ( g all eries : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġtext Ġbox Ġhas Ġcontent ĊĠĠĠĠĠĠĠ Ġif Ġ( g all eries . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno G all eries Specified () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpresenter . add G all eries ( application Context !! , Ġg all eries ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġno G all eries Specified () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . batch _ add _ no _ valid _ g all eries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . batch _ add _ no _ valid _ g all eries _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ