package Ġde . t ud arm st adt . ipt k . fo xt rot . viv ac or onia . trading . needs Ċ Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . android . vol ley . Vol ley Error Ċ import Ġde . t ud arm st adt . ipt k . fo xt rot . viv ac or onia . R Ċ import Ġde . t ud arm st adt . ipt k . fo xt rot . viv ac or onia . clients . Trading ApiClient Ċ import Ġde . t ud arm st adt . ipt k . fo xt rot . viv ac or onia . databinding . Fragment Need Overview Binding Ċ import Ġde . t ud arm st adt . ipt k . fo xt rot . viv ac or onia . trading . Submit Product Activity Ċ import Ġde . t ud arm st adt . ipt k . fo xt rot . viv ac or onia . trading . models . Base Product Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util . concurrent . ExecutionException Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Need Overview Fragment " Ċ Ċ class ĠNeed Overview Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Need Overview Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠNeed List ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . fragment _ need _ overview , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( Need List ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠNeeds Adapter (:: delete Need Callback ) ĊĠĠĠĠĠĠĠ Ġadapter . register Adapter Data Observer ( object : ĠRecyclerView . Adapter Data Observer () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Range Inserted ( position Start : ĠInt , Ġitem Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Item Range Inserted ( position Start , Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Start Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . needs List . layout Manager !!. smooth Scroll To Position ( binding . needs List , Ġnull , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . needs List . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ ĠviewModel . needs List . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . needs Hint . visibility Ġ= Ġif Ġ( it . size Ġ> Ġ 0 ) ĠView . IN VISIBLE Ġelse ĠTextView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġ}) ĊĊĠĠĠĠĠĠĠ ĠBase Product . categories . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . add . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . add . isEnabled Ġ= Ġ! Base Product . categories . value . isNull OrEmpty () Ġ// ĠOnly Ġallow Ġadding Ġoffers Ġif Ġwe Ġfetched Ġ+ Ġreceived Ġcategories ĊĊĠĠĠĠĠĠĠ Ġbinding . needs List Swipe Refresh . setOn Refresh Listener Ġ{ ĠGlobal Scope . launch Ġ{ Ġfetch My Needs () Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . add . setOnClickListener Ġ{ ĠSubmit Product Activity . start ( require Context (), Ġnull , Ġfalse ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġbinding . needs List Swipe Refresh . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . needs List Swipe Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ Ġfetch My Needs () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Need Callback ( id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( it , ĠR . style . AlertDialog Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . yes ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . needs List Swipe Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Delete ( id , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . yes _ need _ fulfilled ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . needs List Swipe Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Delete ( id , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button ( R . string . cancel ) Ġ{ Ġdialog , Ġ_ Ġ-> Ġdialog . dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . delete _ need _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . confirm _ delete _ message _ need ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ?: Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġperform Delete ( id : ĠString , Ġful filled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeleted Ġ= ĠTr ading ApiClient . delete Need ( id , Ġful filled , Ġrequire Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deleted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch My Needs () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Unable Ġto Ġdelete Ġneed Ġwith Ġid Ġ\"$ id \"", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" Unable Ġto Ġdelete Ġneed ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ Ġbinding . needs List Swipe Refresh . is Refresh ing Ġ= Ġfalse Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch My Needs () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġneeds Ġ= ĠTr ading ApiClient . get My Needs ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . run On Ui Thread Ġ{ ĠviewModel . set Needs ( needs ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠExecution Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exception . cause Ġis ĠVol ley Error Ġ&& Ġactivity ?. has Window Focus () Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let { Ġit . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( it , ĠR . string . server _ connection _ failed , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġwhile Ġfetching Ġor Ġparsing Ġmy Offers ", Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . needs List Swipe Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }