package Ġjp . co . sor am its u . feature _ c rowd loan _ impl . presentation . contribute . custom Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġdev . chr is ban es . in setter . apply In setter Ċ import Ġjp . co . sor am its u . common . base . Base Fragment Ċ import Ġjp . co . sor am its u . common . di . Feature Utils Ċ import Ġjp . co . sor am its u . common . view . Button State Ċ import Ġjp . co . sor am its u . feature _ c rowd loan _ api . di . C rowd loan Feature Api Ċ import Ġjp . co . sor am its u . feature _ c rowd loan _ impl . R Ċ import Ġjp . co . sor am its u . feature _ c rowd loan _ impl . di . C rowd loan Feature Component Ċ import Ġjp . co . sor am its u . feature _ c rowd loan _ impl . di . custom C rowd loan . Custom Contribut e Manager Ċ import Ġjp . co . sor am its u . feature _ c rowd loan _ impl . presentation . contribute . custom . model . Custom Contribut e Payload Ċ import Ġkotlinx . android . synt hetic . main . fragment _ custom _ contribute . custom Contribut e Apply Ċ import Ġkotlinx . android . synt hetic . main . fragment _ custom _ contribute . custom Contribut e Container Ċ import Ġkotlinx . android . synt hetic . main . fragment _ custom _ contribute . custom Contribut e Toolbar Ċ import Ġkotlinx . android . synt hetic . main . fragment _ custom _ contribute . custom Flow Container Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġjavax . inject . Inject Ċ Ċ private Ġconst Ġval ĠKEY _ PAYLOAD Ġ= Ġ" KEY _ PAYLOAD " Ċ Ċ class ĠCustom Contribut e Fragment Ġ: ĠBase Fragment < Custom Contribut e ViewModel >() Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġcontribution Manager : ĠCustom Contribut e Manager ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Bundle ( payload : ĠCustom Contribut e Payload ) Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ( KEY _ PAYLOAD , Ġpayload ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ custom _ contribute , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġcustom Contribut e Container . apply In setter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype ( status Bars Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsume ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcustom Contribut e Toolbar . set Home Button Listener Ġ{ ĠviewModel . back Clicked () Ġ} ĊĊĠĠĠĠĠĠĠ Ġcustom Contribut e Apply . prepare For Progress ( view Lifecycle Owner ) ĊĠĠĠĠĠĠĠ Ġcustom Contribut e Apply . setOnClickListener Ġ{ ĠviewModel . apply Clicked () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinject () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġargument < Custom Contribut e Payload >( KEY _ PAYLOAD ) ĊĊĠĠĠĠĠĠĠ ĠFeature Utils . get Feature < C rowd loan Feature Component >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC rowd loan Feature Api :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. custom Contribut e Factory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( this , Ġpayload ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe ( viewModel : ĠCustom Contribut e ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . apply Button State . combine ( viewModel . apply ing InProgress ) Ġ{ Ġstate , Ġin Progress Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Progress Ġ-> Ġcustom Contribut e Apply . setState ( Button State . PROGRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġis ĠApply Action State . Unavailable Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Contribut e Apply . setState ( Button State . DISABLED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Contribut e Apply . text Ġ= Ġstate . reason ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġis ĠApply Action State . Available Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Contribut e Apply . setState ( Button State . NORMAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Contribut e Apply . setText ( R . string . common _ apply ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. collect () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . view State Flow . observe Ġ{ Ġview State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Flow Container . removeAll Views () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew View Ġ= Ġcontribution Manager . create View ( viewModel . custom Flow Type , Ġrequire Context ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Flow Container . addView ( new View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew View . bind ( view State , Ġlifecycle Scope ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ